当前位置: 首页 > 网络知识

udp协议以及socketserver

时间:2026-01-29 09:27:21

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)

上一篇:Qt QTableWidget中设置单个单元格不可编辑和可以编辑
下一篇:Window自带的“画图”软件查看图片某点的RGB值
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素