【目录】

一、【回顾】TCP/UDP

二、 粘包现象

三、什么是粘包

四、解决粘包的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)
服务端

相关文章: