一、粘包现象

让我们基于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解码

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

注意:命令的结果是既有正确stdout结果,又有错误stderr结果

from socket import *
import subprocess

ip_port=('172.16.11.161',8080)
BUFSIZE=1024

tcp_socket_server=socket(AF_INET,SOCK_STREAM)
tcp_socket_server.bind(ip_port)
tcp_socket_server.listen(5)

while True:
    conn,addr=tcp_socket_server.accept()
    print('客户端',addr)

    while True:
        try:
            cmd=conn.recv(BUFSIZE)
            if len(cmd) == 0:break

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

            stderr=res.stderr.read()
            stdout=res.stdout.read()
            conn.send(stderr)
            conn.send(stdout)

        except Exception:
            break
    conn.close()
服务端口

相关文章:

  • 2018-08-09
  • 2022-03-07
  • 2022-12-23
  • 2021-07-29
  • 2022-12-23
  • 2022-02-22
  • 2021-11-21
猜你喜欢
  • 2022-12-23
  • 2021-08-18
  • 2022-12-23
  • 2021-05-12
  • 2022-12-23
相关资源
相似解决方案