在学习网路编程时,我们首先要考虑的是其中的逻辑,我们借助打电话的形式来了解网络编程的过程,

我们打电话时属于呼叫方,接电话的属于被呼叫方,那么被呼叫方一直保持在待机状态,等待主呼叫方

呼叫,只有在被呼叫方接听时双方才可以正常通话。那网络编程逻辑也是如此,在此之前我要调用

import socket

import threading

双人聊天1.被呼叫方:

创建服务套接字≥

服务套接字绑定主机绑定端口号≥

建立最大的连接数>

接收客户套接字>

线程阻塞>

发送信息

importsocketimportthreading

serverrsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

serverrsocket.bind(("192.168.66.180",9999))print('绑定端口和主机')

serverrsocket.listen(5)print('开始接收客户请求')

c=serverrsocket.accept()#线程阻塞

print("有一个客户请求")#msg=c[0].recv(1024)#1024是发送大小#print(msg.decode())#接收的数据要解码#c[0].send("dong".decode())

defmyrevc(c):whileTrue:

msg=c.recv(1024)#阻塞

print(msg.decode())

threading._start_new_thread(myrevc,(c[0],))whileTrue:

msg=input()

c[0].send(msg.encode())

2.主呼叫方:

建立客户套接字》

send发送的数据要编码》

阻塞

importsocketimportthreading

c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)print("创建客户套接字")

c.connect(('192.168.66.180',9999))print("我联机到服务")#send发送的数据要编码#c.send("who are you".encode())#msg=c.recv(1024)#print(msg.decode())

defmyrevc(c):whileTrue:

msg=c.recv(1024)#阻塞

print(msg.decode())

threading._start_new_thread(myrevc,(c,))whileTrue:

msg=input()

c.send(msg.encode())

多人聊天:

1.实现多人聊天也就不存在被呼叫方了,原理是多个主呼叫方把消息一个地方,在返回给各个呼叫方,这时候由于多个用户同时进行

于是我们要开启多个线程。

import threading

import socket

ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

ss.bind('0.0.0.0',9999)

ss.listen(10)

msg=None

lock1=threading.Lock()

con=threading.Condition(lock1)

def server_recv(c,a):

while True:

global msg

while True:

str1=c.recv(1024)

con.acquire

msg=str1

msg=str(a)+str1.decode()

con.notify_all()

con.release()

def server_send(c,a):

global msg

while True:

con.acquire()

con.wait()

con.release()

con.send(msg.encode())

while True:

c,a=ss.accept()

threading._start_new_thread(server_recv,(c,a))

threading._start_new_thread(server_send,(c,a))

python实现多人聊天论文_python网络编程 双人多人聊天相关推荐

  1. python课程设计的主要任务是什么_Python网络编程课程设计 任务1.docx

    [简答题]什么是第2范式? [简答题]请根据案例<明天>,说说你的理解. [单选题]某幼儿完成了一件对他而言具有桃战性的任务一,教师及时地肯定了该幼儿的表现.这位教师遵循的环境创设原则是? ...

  2. python实现udp聊天室_python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序...

    socket介绍: socket(简称套接字),是进程间通讯的一个工具,他能实现把数据从一方传输到另一方,完成不同电脑上进程之间的通讯,它好比数据的搬运工. socket应用: 不夸张来说,只要跟网络 ...

  3. python 在线编程 实现_Python进阶开发之网络编程,socket实现在线聊天机器人

    系列文章 本文目录 .什么是socket? 说到网络编程,难免要提到socket? 那什么是socket呢,中文名叫"套接字",更难理解了吧. 通俗来讲,socket表示一个网络连 ...

  4. python网络通信的几种方式_python网络-计算机网络基础(23)

    一.网络简介 网络是由节点和连线构成,表示诸多对象及其相互联系. 一个人玩: 两个人玩: 多个人玩: 说明 网络就是一种辅助双方或者多方能够连接在一起的工具 如果没有网络可想单机的世界是多么的孤单 使 ...

  5. python 网络编程_Python网络编程(六)

    回顾 在<Python进阶记录之网络编程(五)>中,我们介绍了如何利用TCP服务端和客户端实现一个简单的点对点聊天,区别基于TCP协议和UDP协议的不同之处.今天我们讲一下如何利用多进程和 ...

  6. python网络编程项目_python网络编程详解

    最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...

  7. unet网络python代码详解_python网络编程详解

    最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...

  8. python网络通信传输的数据类型_Python网络编程中的网络数据和网络错误。

    上一个章节我们说的是套接字名和DNS.这篇文章我们主要解决下面问题. 我们在两台主机之间建立与关闭TCP流连接以及UDP数据报连接后.我们应该怎么准备我们需要传输的数据,该怎么对数据进行编码与格式化. ...

  9. python udp通信_Python网络编程(三)

    回顾 在<Python进阶记录之网络编程(二)>中,我们介绍了UDP端口号的基本概念和作用以及Python中UDP服务端的端口绑定和简单创建.今天我们利用UDP server和UDP cl ...

最新文章

  1. 区别 eks_sport 和 exercise 有什么区别?看完你就清楚了!
  2. C语言博客作业04--数组
  3. Windows Server中企业证书服务的安装
  4. Request_获取请求头数据
  5. html5能火多久,html5有多火?看完这个你就知道了!
  6. idea打war的问题
  7. 大楼通信综合布线系统_什么是网络综合布线系统组成?网络综合布线系统如何选择线缆?...
  8. delphi webservice 如何 共享 变量_医疗质量|如何实现非药物医嘱闭环管理?
  9. svg写入/识别html元素和css样式
  10. iOS - 蓝牙开发(中心模式)
  11. 【路径规划】基于matlab A_star算法机器人栅格地图路径规划【含Matlab源码 116期】
  12. 老王利用这个方法引流3个满微信号,半年变现几十万,你学会了你也能做到
  13. Flutter持久化存储之使用和封装shared_preferences
  14. Node学习 | Day04 数据库与身份验证(数据库的基本概念、安装并配置MySQL、MySQL的基本使用、在项目中操作MySQL、前后端的身份验证)
  15. python制作税后工资计算器
  16. 关于计算机软件的研究生就业,计算机软件与理论研究生毕业就业方向
  17. 边缘检测(opencv_python下)
  18. Uos统信系统 nginx
  19. java发展前景选兄弟连_对于Java你了解多少 兄弟连带你了解Java开发工程师现状...
  20. 如何在ST官网和keil官网下载相关资料(外设库和芯片器件库)

热门文章

  1. 某项目网络实施中的几个关键点解析
  2. FG60B SSL ××× V3.0配置
  3. HTML DOM教程 37-HTML DOM Meta 对象
  4. 中文VS2008安装ASP.NET MVC框架解决方案
  5. 综合应用WPF/WCF/WF/LINQ之十七:关于简化发布新版本的步骤的问题
  6. MOOCCube:基于MOOC相关研究的开源大规模数据仓库 ACL2020
  7. java bar_Java Bar类代码示例
  8. 探寻 Redis 内存诡异增长的元凶
  9. atitit查询表改动表字段没反应--解锁锁定的表
  10. Windows下Java调用BAT批处理不弹出cmd窗口