python3 udp不黏包但丢数据
一次性发送的数据量特别的大,导致对方无法接收那么大的数据时,会出现丢数据的情况哦。
# UDP服务端_server.py import socket import subprocess udp_server = socket.socket(type=socket.SOCK_DGRAM) ip_port = ("127.0.0.1", 8001) udp_server.bind(ip_port) from_client_msg, addr = udp_server.recvfrom(1024) print("来自客户端的消息:", from_client_msg.decode("utf-8")) cmd = input(">>>:").strip() res = subprocess.Popen( cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) send_bytes = res.stdout.read() udp_server.sendto(send_bytes, addr) print(len(send_bytes)) udp_server.close()
# UDP客户端_client.py import socket udp_client = socket.socket(type=socket.SOCK_DGRAM) ip_port = ("127.0.0.1", 8001) udp_client.sendto("我是客户端".encode("utf-8"), ip_port) from_server_msg, addr = udp_client.recvfrom(1024) print("来自服务端的消息:", from_server_msg.decode("gbk")) udp_client.close()
当在服务端输入ipconfig时,客户端会报错:
Traceback (most recent call last): File "G:/python28/code/day07/整理笔记/TCP的黏包现象/TCP黏包现象客户端_client.py", line 7, in <module> from_server_msg, addr = udp_client.recvfrom(1024) OSError: [WinError 10040] 一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小。