- socket执行指令
import socket
import os
server = socket.socket()
server.bind(("Localhost", 6969))
server.listen()
while True:
print("开始工作")
conn, addr = server.accept()
print("建立连接:", addr)
while True:
print("等待指令")
data = conn.recv(1024)
print("recv:", data)
res = os.popen(data.decode()).read()
if not len(res):
print("指令错误")
res = "没有这个指令"
conn.send(res.encode())
continue
conn.send(str(len(res.encode())).encode())
client_ack = conn.recv(1024)
conn.send(res.encode())
server.close()
import socket
client = socket.socket()
client.connect(("Localhost", 6969))
while True:
msg = input(">>:").strip()
client.send(msg.encode(encoding = "utf-8"))
info = client.recv(1024)
if not info.decode():
print("此条会话结束")
continue
elif info.decode() == "没有这个指令":
print("指令错误:", msg)
continue
else:
print("命令结果大小:", info.decode())
client.send("准备接受执行结果".encode("utf-8"))
recieved_size = 0
recieved_data = b''
while recieved_size < int(info):
data = client.recv(1024)
recieved_size += len(data)
print(recieved_size)
recieved_data += data
else:
print("cmd res recieved done...", recieved_size)
print(recieved_data.decode())
client.close()
- socket文件传输
import socket
import os
import time
import hashlib
server = socket.socket()
server.bind(("Localhost", 6969))
server.listen()
while True:
print("开始工作")
conn, addr = server.accept()
print("建立连接:", addr)
while True:
print("等待指令")
data = conn.recv(1024)
if not data:
print("客户端已断开")
break
cmd, filename = data.decode().split()
print(filename)
if os.path.isfile(filename):
f = open(filename, "rb")
m = hashlib.md5()
file_size = os.stat(filename).st_size
conn.send(str(file_size).encode())
conn.recv(1024)
for line in f:
m.update(line)
conn.send(line)
print("file_md5", m.hexdigest())
f.close()
conn.send(m.hexdigest().encode())
print("send done")
server.close()
import socket
import os
import hashlib
client = socket.socket()
client.connect(("Localhost", 6969))
while True:
msg = input(">>:").strip()
if len(msg) == 0:continue
if msg.startswith("get"):
client.send(msg.encode())
server_response = client.recv(1024)
print("Server response:", server_response)
client.send(b"Ready to recv file")
file_total_size = int(server_response.decode())
recieved_size = 0
file_name = msg.split()[1]
f = open(file_name+".new", "wb")
m = hashlib.md5()
while recieved_size < file_total_size:
if (file_total_size - recieved_size) > 1024:
size = 1024
else:
size = file_total_size - recieved_size
data = client.recv(1024)
recieved_size += len(data)
m.update(data)
f.write(data)
else:
new_file_md5 = m.hexdigest()
print("File recv done")
f.close()
server_file_md5 = client.recv(1024)
print("server file md5:", server_file_md5.decode())
print("new file md5: ", new_file_md5)
client.close()