粘包

粘包现象就是设置的接受大小过小,导致一次接受没有完,导致缓冲区还有未接受完的信息,导致下一次的接受会出现接收到上一次的信息。   这就是粘包现象

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'))
原文地址:https://www.cnblogs.com/ch2020/p/12527933.html