文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 一、socket
- 二、socketserver
- 1.引入库
- 2.读入数据
- 代码如下(示例):
- 总结
一、socket
1. 路飞学城 林海峰老师
2. 调用系统命令6种方法
例 1-1
import socket,subprocess,struct,json
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server.bind(("127.0.0.1",9000))
server.listen(2)
while True:
conn,client_addr=server.accept()
while True:
try:
#1.接收命令
cmd=conn.recv(1024)
if not cmd: break
cmd=cmd.decode("utf8")
print("【收到远程客户端的命令】", cmd)
#2.在服务端执行命令
obj = subprocess.Popen(cmd, shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
cmd_res_stdout=obj.stdout.read()
cmd_res_stderr=obj.stderr.read()
#3.执行命令的结果返回客户端
header_dic={
"filename":"a.txt",
"md5":"xxxx",
"total_size":len(cmd_res_stdout+cmd_res_stderr)
}
header_json=json.dumps(header_dic)
header_bytes=header_json.encode("gbk")
print(header_bytes)
header_len=struct.pack("i",len(header_bytes))
conn.send(header_len)
conn.send(header_bytes)
conn.send(cmd_res_stdout)
conn.send(cmd_res_stderr)
except ConnectionResetError:
break
conn.close()
server.close()
例 1-2
import socket,struct,json
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",9000))
print(client)
while True:
cmd=input(">>: ").strip().encode("utf8")
if not cmd:continue
client.send(cmd)
rec_header_len_bytes=client.recv(4)
rec_header_len=struct.unpack("i",rec_header_len_bytes)[0]
print(rec_header_len)
rec_header_bytes=client.recv(rec_header_len)
rec_header_dict=json.loads(rec_header_bytes.decode("gbk"))
rec_data_len=rec_header_dict["total_size"]
recv_size=0
recv_data=b""
while recv_size<rec_data_len:
res=client.recv(1024)
recv_data+=res
recv_size+=len(res)
print("【来自服务端的数据】\n",recv_data.decode("gbk"))
client.close()
二、socketserver
1.引入库
代码如下(示例):
2.读入数据
代码如下(示例):
总结
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)