python socket实例

想在一问一答基础上加上client端向server端发 shell命令 返回命令结果

server端

import socket
import subprocess
sk=socket.socket()
# print(sk)
sk.bind(('127.0.0.1',8000))
sk.listen(3)

while True:
conn, addr = sk.accept()
while True:
try:
data = conn.recv(1024)
a=subprocess.Popen(str(data,'utf8'),shell=True,stdout=subprocess.PIPE) #data.decode('utf8)
# data=str(a.stdout.read(), 'gbk')
# print(a.stdout.read())
data_send=a.stdout.read() #二进制的数据
data_send_len=bytes(str(len(data_send)),'utf8') #在这应该算二进制的长度 注意!
#发送数据长度
conn.send(data_send_len)
print(data_send_len)
conn.send(data_send)
except Exception :
break
if not data:
break

# inp=input('>>>>>>')
# conn.send(bytes(inp,'utf8'))
conn.close()
sk.close()



client端
import socket
sk=socket.socket()
sk.connect(('127.0.0.1',8000))
while True:
inp=input('>>>>>>>')
if inp=='q':
print('我退了')
break
sk.send(bytes(inp,'utf8'))
data_len=sk.recv(1024) #二进制
print(int(str(data_len,'utf8')))
data=b''
while len(data) !=int(str(data_len,'utf8')):
recv_current=sk.recv(1024)
data+=recv_current
# print(str(data, 'gbk'))
print(str(data,'gbk'))
# print(data)
sk.close()
# print(sk)


写出漂亮的博客就是为了以后看着更方便的。
原文地址:https://www.cnblogs.com/zhaowei5/p/9287607.html