服务端:
1 from socket import * 2 3 server = socket(AF_INET, SOCK_DGRAM) 4 server.bind(('127.0.0.1', 8080)) 5 6 res1 = server.recvfrom(1024) 7 print('第一次:', res1) 8 9 res2 = server.recvfrom(1024) 10 print('第一次:', res2) 11 12 server.close()
客户端:
1 from socket import * 2 3 client = socket(AF_INET, SOCK_DGRAM) 4 5 client.sendto(b'hello', ('127.0.0.1', 8080)) 6 client.sendto(b'world', ('127.0.0.1', 8080)) 7 8 client.close()
先运行服务端,在运行客户端,并没有发生粘包现象,
服务端运行结果为:
1 第一次: (b'hello', ('127.0.0.1', 61924))
由于windows系统原因,第二次并没有打印出来,
把服务端第一次recv的字节数修改为1,只能收到1个字节h,其余丢失,
第二收到的为world,windows系统测试出现问题:
1 Traceback (most recent call last): 2 File "C:/Users/xudachen/PycharmProjects/Python全栈开发/第三模块/网络编程/基于udp协议不会发生粘包/服务端.py", line 6, in <module> 3 res1 = server.recvfrom(1) 4 OSError: [WinError 10040] 一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小。
linux系统不会出现这种问题,