一、粘包现象                                                                               

让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig)

注意注意:

res=subprocess.Popen(cmd.decode('utf-8'),
shell=True,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)

的结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码的,在接收端需要用GBK解码

且只能从管道里读一次结果

 1 #_*_coding:utf-8_*_
 2 __author__ = 'Linhaifeng'
 3 from socket import *
 4 import subprocess
 5 
 6 ip_port=('127.0.0.1',8080)
 7 BUFSIZE=1024
 8 
 9 tcp_socket_server=socket(AF_INET,SOCK_STREAM)
10 tcp_socket_server.bind(ip_port)
11 tcp_socket_server.listen(5)
12 
13 while True:
14     conn,addr=tcp_socket_server.accept()
15     print('客户端',addr)
16 
17     while True:
18         cmd=conn.recv(BUFSIZE)
19         if len(cmd) == 0:break
20 
21         act_res=subprocess.Popen(cmd.decode('utf-8'),shell=True,
22                          stdout=subprocess.PIPE,
23                          stdin=subprocess.PIPE,
24                          stderr=subprocess.PIPE)
25 
26         act_err=act_res.stderr.read()
27         if act_err:
28             ret=act_err
29         else:
30             ret=act_res.stdout.read()
31 
32         conn.sendall(ret)
33 
34 服务端
服务端

相关文章:

  • 2022-02-03
  • 2021-10-04
  • 2021-09-09
  • 2022-12-23
猜你喜欢
  • 2021-06-07
  • 2021-10-04
  • 2021-10-31
相关资源
相似解决方案