【发布时间】:2020-05-08 21:51:27
【问题描述】:
client.py 中的循环错误,我无法下载。我将如何解决?我正在使用 Pycharm。我不明白循环错误,我已经尝试了 2-3 个小时。我正在尝试修复循环错误,但我做不到。请帮助我。当我写文件名和下载错误时。服务器运行没有问题。同样在客户端。当我只是运行代码时,它并没有退出最后一个while循环,它似乎总是在下载。
---------server.py-----
import socket
import threading
import os
def RetrFile(name, sock):
filename = sock.recv(1024)
print(filename)
if os.path.isfile(filename):
sock.send(b"EXISTS " + str(os.path.getsize(filename)).encode())
userResponse = sock.recv(1024)
if userResponse[:2] == 'OK':
with open(filename, 'rb') as f:
bytesToSend = f.read(1024)
sock.send(bytesToSend)
while bytesToSend != "":
bytesToSend = f.read(1024)
sock.send(bytesToSend)
else:
sock.send(b"ERR ")
sock.close()
def Main():
host = '127.0.0.1'
port = 5001
s = socket.socket()
s.bind((host, port))
s.listen(5)
print("Server Started.")
while True:
c, addr = s.accept()
print("client connedted ip:<" + str(addr) + ">")
t = threading.Thread(target=RetrFile, args=("retrThread", c))
t.start()
s.close()
if __name__ == '__main__':
Main()
-------client.py-------
import socket
def Main():
host = '127.0.0.1'
port = 5001
s = socket.socket()
s.connect((host, port))
filename = bytearray(input("Filename? -> ").encode())
if filename != 'q':
s.send(filename)
data = s.recv(1024)
if data[:6].decode().rstrip().upper() == 'EXISTS':
filesize = int(data[6:].decode().rstrip())
message = input("File exists, " + str(filesize) + "Bytes, download? (Y/N)? -> ")
if message == 'Y' or message == 'y':
s.send(b'OK')
f = open('new_' + filename.decode(), 'wb')
data = s.recv(1024)
totalRecv = len(data)
f.write(data)
i = 0
while totalRecv < filesize:
data = s.recv(1024)
totalRecv += len(data)
f.write(data)
print("{0:.2f}".format((totalRecv / float(filesize)) * 100) + "% Done")
print("Download Complete!")
f.close()
else:
print("File Does Not Exist!")
s.close()
if __name__ == '__main__':
Main()
【问题讨论】:
-
可以分享一下数据列表吗?
标签: python python-3.x list python-2.7 python-requests