python网络编程 双人多人聊天
在学习网路编程时,我们首先要考虑的是其中的逻辑,我们借助打电话的形式来了解网络编程的过程,
我们打电话时属于呼叫方,接电话的属于被呼叫方,那么被呼叫方一直保持在待机状态,等待主呼叫方
呼叫,只有在被呼叫方接听时双方才可以正常通话。那网络编程逻辑也是如此,在此之前我要调用
import socket
import threading 双人聊天
1.被呼叫方:
创建服务套接字≥
服务套接字绑定主机绑定端口号≥
建立最大的连接数>
接收客户套接字>
线程阻塞>
发送信息
import socket
import threading
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())
def myrevc(c):
while True:
msg=c.recv(1024)#阻塞
print(msg.decode())
threading._start_new_thread(myrevc,(c[0],))
while True:
msg=input()
c[0].send(msg.encode())
2.主呼叫方:
建立客户套接字》
send发送的数据要编码》
阻塞
import socket
import threading
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())
def myrevc(c):
while True:
msg=c.recv(1024)#阻塞
print(msg.decode())
threading._start_new_thread(myrevc,(c,))
while True:
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 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- 28、Python网络编程
一.基于TCP协议的socket套接字编程 1.套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 ...
- Python网络编程04 /recv工作原理、展示收发问题、粘包现象
Python网络编程04 /recv工作原理.展示收发问题.粘包现象 目录 Python网络编程04 /recv工作原理.展示收发问题.粘包现象 1. recv工作原理 2. 展示收发问题示例 发多次 ...
- Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信
Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...
- python网络编程01 /C/S架构|B/S架构、网络通信原理、五层协议、七层协议简述、端口映射技术
python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述.端口映射技术 目录 python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述. ...
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- Python 网络编程(一)
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
随机推荐
- Hadoop2.7.7_HA高可用部署
1. Hadoop的HA机制 前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 1.1. HA的运作机制 (1)hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*2 ...
- ELK-Elasticsearch 安装启动
系统版本:Centos7 Elasticsearch:5.3.1 1:关闭SELinux [root@es local]# sed -i 's/SELINUX=enforcing/SELINUX=di ...
- 把Excel作为数据库,读到DataTable中,Excel科学计数法数字转字符串
需要引用:using System.Data.OleDb; /// <summary> /// 获取Excel数据,包含所有sheet /// </summary> /// & ...
- selemium 常用查找方法
1.selemium.FindElement(By.LinkText("下一步")) 2.selemium.FindElement(By.Id("userNumber&q ...
- Linux驱动之USB鼠标驱动编写
本篇博客分以下几部分讲解 1.介绍USB四大描述 2.介绍USB鼠标驱动程序功能及框架 3.介绍程序用到的结构体 4.介绍程序用到的函数 5.编写程序 6.测试程序 1.介绍USB四大描述符 USB设 ...
- Python中__init__和self的意义和作用
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去.以学生类为例,通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑 ...
- 7A - Max Sum
Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. F ...
- 获取Control请求路径
对于多个uri映射到同一个control方法时,需根据不同的uri返回的数据结构进行区分,因此需要再方法体内获取到RequestUri,再对其做相应的判断实现对应的业务逻辑 @Resource pri ...
- java 日志体系目录
java 日志体系目录 1.1 java 日志体系(一)log4j1.log4j2.logback.jul.jcl.slf4j 1.2 java 日志体系(二)jcl 和 slf4j 2.1 java ...
- Rabbit
安装配置参考:https://blog.csdn.net/qq_31634461/article/details/79377256 概念学习参考(纯洁的微笑):https://www.cnblogs. ...