udp协议以及socketserver


udb协议

udb协议也是一种协议,它和tcp相比既有缺点也有优点

udb协议所发送的数据可以理解为自带报头,所以他不会出现粘包的情况。但是udp数据只管发送而不管接收,也就是说udp会出现丢包的情况,当客户端的数据服务端没有收到时,客户端并不知道还会继续发数据

udp协议简单实例

# 服务器 import socket #udp server=socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8003)) while True: data,addr=server.recvfr(1024) print(data) server.sendto(data.upper(),addr) # 客户端 import socket #udp client=socket.socket(type=socket.SOCK_DGRAM) while True: msg=input('>>:') #直接发 client.sendto(msg.encode('utf8'),('127.0.0.1', 8003)) data=client.recvfr(1024) print(data)

socketserver模块

socketserver主要是用来写服务端并且进行开发的

拿之前所展示的tcp协议来说,我们之前所用的scp协议是单对单的,换句话说,如果服务器已经和第一个客户端连接,那么第二个客户端就会找不到目标。而socketserver则实现了并发的功能。如果把服务器比作一个饭店的话,他就好像是一个前台的迎宾,当有客户进来的时候,他会叫一名服务员去招待,而如果不用的话,就相当于只有一名服务员,第二个客户进不来了。

下面将直接把socketserver用实例来进行展示

#使用socketserver写服务端 #导入模块 import socketserver #自己定义一个类,必须继承BaseRequestHandler class MyTcp(socketserver.BaseRequestHandler): #必须重写handle方法 def handle(self): try: while True : #通信循环 # print(self) #给客户端回消息 #conn对象就是request #接收数据 print(selflient_address) data=self.request.recv(1024) print(data) if len(data)==0: return #发送数据 self.request.send(data.upper()) except Exception: pass if __name__ == '__main__': #实例化得到一个tcp连接的对象,Threading意思是说,只要来了请求,它自动的开线程来处理连接跟交互数据 #第一个参数是绑定的地址,第二个参数传一个类 server=socketserver.ThreadingTCPServer(('127.0.0.1',8009),MyTcp) #一直在监听 #这么理解:只要来一个请求,就起一个线程(造一个人,做交互) server.serve_forever() # 客户端 import socket import time soc=socket.socket() soconnect(('127.0.0.1',8009)) while True: soc.send('xxxx'.encode('utf8')) print(soc.recv(1024))

socketserver模块和udp

就是简单的将以上俩种相结合就完事了

#使用socketserver写服务端 #导入模块 import socketserver #自己定义一个类,必须继承BaseRequestHandler class MyTcp(socketserver.BaseRequestHandler): #必须重写handle方法 def handle(self): print(self) #数据 print(self.request[0]) print(self.request[1]) print(type(self.request[1])) self.request[1].sendto('xxxx'.encode('utf8'),selflient_address) # try: # while True : #通信循环 # data=self.request.recvfr(1024) # print(data) # except Exception: # pass if __name__ == '__main__': #实例化得到一个tcp连接的对象,Threading意思是说,只要来了请求,它自动的开线程来处理连接跟交互数据 #第一个参数是绑定的地址,第二个参数传一个类 server = socketserver.ThreadingUDPServer(('127.0.0.1', 8009), MyTcp) #一直在监听 server.serve_forever() # 客户端1 import socket import time soc=socket.socket() soconnect(('127.0.0.1',8009)) while True: soc.send('yyy'.encode('utf8')) print(soc.recv(1024)) # 客户端2 import socket #udp client=socket.socket(type=socket.SOCK_DGRAM) client.sendto('lqz'.encode('utf8'),('127.0.0.1', 8009)) # client.sendto('hello'.encode('utf8'),('127.0.0.1', 8009)) # client.sendto('world'.encode('utf8'),('127.0.0.1', 8009)) # client.sendto(''.encode('utf8'),('127.0.0.1', 8009)) data=client.recvfr(1024) print(data)

上一篇:Window自带的“画图”软件查看图片某点的RGB值

下一篇:Q QTreeWidget遍历,通过QTreeWidgetItemIterator


Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图