码迷,mamicode.com
首页 > 编程语言 > 详细

python学习之day08

时间:2017-08-20 00:47:06      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:ddr   现象   set   blog   decode   shel   import   except   cli   

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)
11 server.bind((host,port))
12 server.listen(listen_max)
13 
14 while True:
15     conn,clint_addr = server.accept()
16     print(clint_addr)
17     while True:
18         try:
19             cmd = conn.recv(recv_max)
20             if not cmd:continue
21 
22             #只能从管道里读一次结果
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)
30         except Exception as e:
31             break
32     conn.close()
33 
34 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)
 9 client.connect((host,port))
10 
11 while True:
12     cmd = input(>>: ).strip()
13     if not cmd:continue
14     client.send(cmd.encode(utf-8))
15     cmd_rec = client.recv(recv_max)
16     print(cmd_rec.decode(utf-8))
17 
18 client.close()

 

粘包:

只有TCP有粘包现象,UDP永远不会粘包。

所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

python学习之day08

标签:ddr   现象   set   blog   decode   shel   import   except   cli   

原文地址:http://www.cnblogs.com/wingsmm/p/7398394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!