Ŀ¼
# *****************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))
来源:博客园
作者:PLPLPL
链接:https://www.cnblogs.com/yushan1/p/11494618.html