UDP协议

匿名 (未验证) 提交于 2019-12-03 00:00:02

Ŀ¼

# *****************udp服务端**************** # 基础版本 import socket # udp server = socket.socket(type=socket.SOCK_DGRAM)  server.bind(('127.0.0.1',8000)) # udp不要建立连接,直接发 # 需不需要监听? # 跟tcp的不是一样的 # data = server.recvfrom(1024) data,addr = server.recvfrom(1024) # data 是个元组,第一个参数是数据部分,第二个参数是客户端地址 print(data) server.sendto(data.upper(),addr)   # 加入通信循环 import socket # udp server = socket.socket(type=socket.SOCK_DGRAM)  server.bind(('127.0.0.1',8000))  while True:     data,addr = server.recvfrom(1024)     print(data)     server.sendto(data.upper(),addr)      # *****************udp客户端**************** # 基础版本 import socket # udp client = socket.socket(type=socket.SOCK_DGRAM)  # 直接发 client.sendto(b'lqz',('127.0.0.1',8000)) data = client.recvfrom(1024) print(data)  # 加入通信循环 import socket # udp client = socket.socket(type=socket.SOCK_DGRAM)  while True:     msg = input('请输入要发送的数据:')     # 直接发     client.sendto(msg.encode('utf-8'),('127.0.0.1',8000))     data = client.recvfrom(1024)     print(data)
# *****************udp服务端**************** # udp 协议没有粘包问题(udp协议又叫数据报协议),可以发空,tcp不行 import socket server = socket.socket(type=socket.SOCK_DGRAM)  server.bind(('127.0.0.1',8000)) while True:     data,addr = server.recvfrom(1024)     print(data)     server.sendto(data.upper(),addr)  data,addr = server.recvfrom(1024) print(data) data,addr = server.recvfrom(1024) print(data) data,addr = server.recvfrom(1024) print(data) data,addr = server.recvfrom(1024) print(data)    # *****************udp客户端**************** import socket  client = socket.socket(type=socket.SOCK_DGRAM)  while True:     msg = input('>>>:')     client.sendto(msg.encode('utf-8'),('127.0.0.1',8000))     data = client.recvfrom(1024)     print(data)  client.sendto('lqz'.encode('utf-8'),('127.0.0.1',8000)) client.sendto('hello'.encode('utf-8'),('127.0.0.1',8000)) client.sendto('world'.encode('utf-8'),('127.0.0.1',8000)) client.sendto(''.encode('utf-8'),('127.0.0.1',8000))   # ***********udp客户端丢包**************** import socket # udp 不会管客户端或者服务端是否收到,它只管发,所以不可靠  client = socket.socket(type=socket.SOCK_DGRAM)  while True:     msg = input('>>>:')     client.sendto(msg.encode('utf-8'),('127.0.0.1',8000))     data = client.recvfrom(1024)     print(data)   # udp特点     # 可以发空(数据报协议,自带头)     # 客户端和服务端可以有一方没在线(因为不需要建立连接)
# **************socketserver服务端************ # 使用socketsever写服务端 # 导入模块  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('utf-8'),self.client_address)         try:             while True:  # 通信循环                 data = self.request.recvfrom(1024)                 print(data)         except Exception:             pass  if __name__ == '__main__':     # 实例化得到一个tcp连接的对象,Threading意思是说,只要来了请求,它自动的开线程来处理连接跟交互数据     server = socketserver.ThreadingUDPServer(('127.0.0.1', 8000), MyTcp)     # 一直在监听     # 这么理解:只要来一个请求,就起一个线程(造一个人,做交互)     server.serve_forever()      # **************client_通信循环************** import socket # udp client = socket.socket(type=socket.SOCK_DGRAM)  client.sendto('lqz'.encode('utf-8'),('127.0.0.1',8000)) client.sendto('hello'.encode('utf-8'),('127.0.0.1',8000)) client.sendto('world'.encode('utf-8'),('127.0.0.1',8000)) client.sendto(''.encode('utf-8'),('127.0.0.1',8000)) data = client.recvfrom(1024) print(data)
# **************socketsever服务端************* # 使用socketserver写服务端 # 导入模块 import socketserver  # 自己定义一个类,必须继承BaseRequestHandler class MyTcp(socketserver.BaseRequestHandler):     # 必须重写handle方法     def handle(self):         try:             while True:  # 通信循环                 print(self)                 # 给客户端回消息                 # conn对象就是request                 # 接收数据                 print(self.client_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',8001),MyTcp)     # 一直在监听     # 这么理解:只要来一个请求,就起一个线程(造一个人,做交互)     server.serve_forever()      # *************client_通信循环************** import socket  soc = socket.socket() soc.connect(('127.0.0.1',8001)) while True:     soc.send('xxxx'.encode('utf-8'))     print(soc.recv(1024))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!