粘包现象就是设置的接受大小过小,导致一次接受没有完,导致缓冲区还有未接受完的信息,导致下一次的接受会出现接收到上一次的信息。 这就是粘包现象
udp不会出现粘包,tcp会出现粘包 粘包可以通过设置接受字节的长度进行解除
udp远程控制的代码,服务端:
1 from socket import * 2 import subprocess 3 4 udp_server = socket(AF_INET, SOCK_DGRAM) 5 udp_server.bind(('127.0.0.1', 8080)) 6 while True: 7 print('正在接受数据') 8 cmd, addr = udp_server.recvfrom(1201) 9 print('接受到来自%s的命令【%s】'%(addr,cmd.decode())) 10 res = subprocess.Popen(cmd.decode(), shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, 11 stdout=subprocess.PIPE) 12 err = res.stderr.read() 13 if err: 14 cmd_res = err 15 else: 16 cmd_res = res.stdout.read() 17 if not cmd_res: 18 cmd_res = '执行成功'.encode('GBK') 19 udp_server.sendto(cmd_res, addr)
客户端;
1 from socket import * 2 3 udp_client = socket(AF_INET, SOCK_DGRAM) 4 while True: 5 cmd = input('亲输入命令:') 6 if not cmd: continue 7 if cmd == 'quit': break 8 udp_client.sendto(cmd.encode(), ('192.168.3.12', 8080)) 9 data, addr = udp_client.recvfrom(2222) 10 print(data.decode('GBK'))