python实现多人聊天udp_PYTHON——TCP&UDP:socketserver实现多人聊天

主要类型

该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer。

1. TCPServer

2. UDPServer

3. UnixStreamServer,类似于TCPServer提供面向数据流的套接字连接,但是旨在UNIX平台上可用;

4. UnixDatagramServer,类似于UDPServer提供面向数据报的套接字连接,但是旨在UNIX平台上可用;

这四个类型同步地处理请求,也就是说一个请求没有完成之前是不会处理下一个请求的,这种模式当然不适合生产环境,一个客户端连接就可能拖延所有的执行。所以这个模块还提供了两种支持异步处理的类:

5. ForkingMixIn,为每一个客户端请求派生一个新的进程去专门处理;

6. ThreadingMixIn,为每一个客户端请求派生一个新的线程去专门处理;

继承自这两个类型的服务端在处理新的客户端连接时不会阻塞,而是创建新的进/线程专门处理客户端的请求。

编程框架

首先从高层面介绍一下使用SocketServer模块开发多进程/线程 异步服务器的流程:

1. 根据需要选择一个合适的服务类型,如,面向TCP连接的多进程服务器:  ForkingTCPServer ;

2. 创建一个请求处理器(request handler)类型,这个类型的 handle()(类似于回调函数)方法中定义如何处理到达的客户端连接。

3. 实例化服务器,传入服务器绑定的地址和第2步定义的请求处理器类;

4. 调用服务器实例的 handle_request() 或 serve_forever() 方法,一次或多次处理客户请求。

实例代码:

服务端:socket server:

importsocketserverimporttime

host= ''port= 8000buffersize= 1024address=(host,port)classMyRequestHandler(socketserver.BaseRequestHandler):defhandle(self):print('客户端已经连接,地址:{}'.format(self.client_address))whileTrue:

conn=self.requestprint('客户端地址:{}'.format(self.client_address))whileTrue:

client_data=conn.recv(buffersize)print(str(client_data,'utf8'))print('waiting......')

# conn.sendall(time.ctime().encode(encoding='utf-8')+b' '+client_data)

resposeStr = input('>>>') conn.sendall(time.ctime().encode(encoding='utf-8')+b' '+ bytes(resposeStr,'utf8'))

conn.close()

if __name__=='__main__':

server=socketserver.ThreadingTCPServer(address,MyRequestHandler)print('正在等待客户端的连接。。。。。。')

server.serve_forever()

客户端:普通client

importsocket

sk=socket.socket()

address= ('127.0.0.1',8000)

sk.connect(address)whileTrue:

inp= input('>>>')if inp=='exit':breaksk.send(bytes(inp,'utf8'))

data= sk.recv(1024)print(str(data,'utf-8'))

sk.close()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值