python学习之day08
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习之day08相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章
坚持Selenium+Python学习之从读懂代码开始 DAY6