代码如下:?
### 客户端 # -*-coding:utf-8-*- # Author:Ds import socket # 实例化UDP协议的socket对象 ,配置参数, socket.SOCK_DGRAM(数据报) udp_cli=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while 1: # 1. 向客户端发送数据 to_ser_msg=input('请输入内容:>>>').strip() # sendto 包含 字节数据和服务端的ip和端口 两部分内容 udp_cli.sendto(to_ser_msg.encode('utf-8'),('127.0.0.1',9999)) # 2. recvfrom 接收服务端返回的数据 from_ser_msg=udp_cli.recvfrom(1024) print(f'来自{from_ser_msg[1]}的信息:{from_ser_msg[0].decode("utf-8")}') ### 服务端 # -*-coding:utf-8-*- # Author:Ds import socket # 实例化UDP协议的socket对象 ,配置参数, socket.SOCK_DGRAM(数据报) udp_server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) udp_server.bind(('127.0.0.1',9999)) # 绑定服务端IP和端口 while 1 : # 1. 接收任意客户端发送的数据 from_cli_msg=udp_server.recvfrom(1024) # 接收到的是元组类型的数据, 包含客户端的IP和端口,客户端发来的字节数据 print(from_cli_msg) # 格式化输出 print(f'来自{from_cli_msg[1]}的信息:{from_cli_msg[0].decode("utf-8")}') # 2. 向客户端返回数据, to_cli_msg=input('请输入回复消息:>>>').strip() # 因为接收的数据中包含了客户端的的IP和地址 udp_server.sendto(to_cli_msg.encode('utf-8'),from_cli_msg[1])sendto: 发送数据,包含两部分内容(字节形式数据,服务端的IP和地址)
recvfrom: 接收数据(1024)
udp是无链接,先启动哪一端都不会报错(无论服务端还是客户端发送数据,都不管另一方是否能接收到)
需要用它来实现并发,也就是同时可以和多个客户端进行通信
### 服务端 # -*-coding:utf-8-*- # Author:Ds import socketserver # 这个请求类要继承BaseRequestHandler,并且还有重写父类里的handle() class My_Server(socketserver.BaseRequestHandler): def handle(self): while 1: # 接收数据 from_cli_data=self.request.recv(1024).decode('utf-8') print(from_cli_data) # 返回数据 ## 服务器还是依次给客户端返回数据 to_cli_data=input('请输入要返回的消息:>>').strip() self.request.send(to_cli_data.encode('utf-8')) if __name__ == '__main__': IP_PROT=('127.0.0.1',9999) # 定义 服务端的IP和端口 # 1.利用模块 socketserver 开启多线程TCP # 2. 把端口和IP IP_PROT , 自定义请求处理类My_Server server=socketserver.ThreadingTCPServer(IP_PROT,My_Server) server.serve_forever() # 永远开启连接通道 ### 客户端 ## 可以开启多个客户端, 同时向服务器发送数据, # -*-coding:utf-8-*- # Author:Ds import socket client=socket.socket() client.connect(('127.0.0.1',9999)) while 1: ui=input('输入内:>>').strip() client.send(ui.encode('utf-8')) from_ser_data=client.recv(1024) print(f'来自服务器的信息:{from_ser_data.decode("utf-8")}')转载于:https://www.cnblogs.com/dengl/p/11207446.html
相关资源:数据结构—成绩单生成器