我正在编写一个程序,连接后要求用户输入“命令”。输入“命令”/“参数”后,代码的客户端部分创建文件存档,然后将它们发送到这些文件应到达的服务器部分。随后,在服务器部分,读取“命令”后,创建存档进行保存,如此循环,直至接收到所有数据。数据(字节)将被读取并存储,但在接收到所有数据后,循环不会退出。而且,在客户端部分,循环一切正常。我自己不是编程专业人士,尝试了所有可能的方法,但没有任何效果。如果有人可以帮助解决这个问题,我将不胜感激。
服务器代码
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 12345))
s.listen()
conn, addr = s.accept()
print("SUCCESSFULLY")
while True:
cmd = input("> ")
if cmd[:1] == "1":
conn.send(cmd.encode())
data = conn.recv(8192)
file=open('1_ser.zip', mode="wb")
while data:
print(data)
if not data:
break
else:
file.write(data)
data = conn.recv(8192)
file.close()
print(f"ВЫХОД СОВЕРШЕН ИЗ СЕРВЕРА!")
客户代码
import socket, zipfile, os
from zipfile import ZipFile
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 12345))
while True:
cmd = s.recv(8192)
cmd = cmd.decode()
if cmd[:1] == "1":
ziph = ZipFile(f'{cmd[2:]}\\1.zip', 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=1)
for root, dirs, files in os.walk(f"{cmd[2:].strip()}"):
for file in files:
ziph.write(os.path.join(root, file))
ziph.close()
#Пример: "1 C:\Users"
# без кавычек и \ в самом конце пути
file = open(f'{cmd[2:]}\\1.zip', mode="rb")
data = file.read(8192)
while (data):
s.send(data)
data = file.read(8192)
print(f"ВЫХОД СОВЕРШЕН ИЗ КЛИЕНТА!")
file.close()