ssh服务器:
服务器:
1
import
socket
2
import
subprocess
3
4 host = ‘127.0.0.1‘ 5 port = 8080
6 listen_max = 5
7 recv_max = 1024
8 9 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
10 server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
11server.bind((host,port))
12server.listen(listen_max)
1314while True:
15 conn,clint_addr = server.accept()
16print(clint_addr)
17while True:
18try:
19 cmd = conn.recv(recv_max)
20ifnot cmd:continue2122#只能从管道里读一次结果23#编码是以当前所在的系统为准的24#如果是windows,那么res.stdout.read()读出的就是GBK编码的 在接收端需要用GBK解码25 res = subprocess.Popen(cmd.decode(‘utf-8‘),shell = True,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
26# 既有正确stdout结果,又有错误stderr结果27 stdout = res.stdout.read()
28 stderr = res.stderr.read()
29 conn.send(stdout + stderr)
30except Exception as e:
31break32 conn.close()
3334 server.close()
客户端:
1
import
socket
2
3 host = ‘127.0.0.1‘ 4 port = 8080
5 listen_max = 5
6 recv_max = 1024
7 8 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
9client.connect((host,port))
1011while True:
12 cmd = input(‘>>: ‘).strip()
13ifnot cmd:continue14 client.send(cmd.encode(‘utf-8‘))
15 cmd_rec = client.recv(recv_max)
16print(cmd_rec.decode(‘utf-8‘))
1718 client.close()
粘包:
只有TCP有粘包现象,UDP永远不会粘包。
所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。
原文:http://www.cnblogs.com/wingsmm/p/7398394.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!