udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
UDP协议的通信优势:
允许一个服务器同时和多个客户端通信,
TCP不行
服务端
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1', 8888)) while 1: # 接收 msg_r, addr = sk.recvfrom(1024) str_msg = msg_r.decode('utf-8') if str_msg == 'q': continue else: # 用':'分割字符串一次 变成列表 lis = str_msg.split(':', 1) # 姓名 na = lis[0].strip() # 信息 info = lis[1].strip() print(' 33[1;37;40m' + na + ': 33[0m' + info) # 发送 msg_s = input('我:') if msg_s != 'q': sk.sendto(msg_s.encode('utf-8'), addr) else: sk.sendto(msg_s.encode('utf-8'), addr) break sk.close()
客户端
import socket name = input('请输入你的姓名: ') sk = socket.socket(type=socket.SOCK_DGRAM) while 1: # 发送 msg_s = input('>>>') if msg_s != 'q': sk.sendto((name +':'+ msg_s).encode('utf-8'),('127.0.0.1',8888)) else: sk.sendto((msg_s).encode('utf-8'),('127.0.0.1',8888)) break # 接收 msg_r,addr = sk.recvfrom(1024) if msg_r.decode('utf-8') == 'q': break else: print(msg_r.decode('utf-8'))