【目录】
二、 粘包现象
三、什么是粘包
四、解决粘包的low比处理方法
五、峰哥解决粘包的方法
六、认证客户端的链接合法性
七、socketserver实现并发
二、 粘包现象
注意:
1、res=subprocess.Popen(cmd.decode('utf-8'),shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
的结果的编码是以当前所在的系统为准的;如果是windows,那么res.stdout.read()读出的就是GBK编码的,
在接收端需要用GBK解码,且只能从管道里读一次结果
2、命令ls -l ; lllllll ; pwd 的结果,是既有正确stdout结果,又有错误stderr结果
1、基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig)
基于tcp的socket,在运行时会发生粘包——
![]()
#_*_coding:utf-8_*_
from socket import *
import subprocess
ip_port=('127.0.0.1',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:
cmd=conn.recv(BUFSIZE)
if len(cmd) == 0:break
res=subprocess.Popen(cmd.decode('utf-8'),shell=True,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE)
stderr=act_res.stderr.read()
stdout=act_res.stdout.read()
conn.send(stderr)
conn.send(stdout)
服务端