Python Socket文件传输发送-While循环错误[关闭] 。

问题描述 投票:0回答:1

当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
1个回答
0
投票

我理解客户端不能下载文件是因为它不从服务器发送文件.Client.py发送字节响应到server.py当它进行比较时,它返回false.服务器没有发送文件,因为if没有给出true.我改变了if语句像这样,可能这将给出true并发送文件。

   if userResponse == b'OK':
        with open(filename, 'rb') as f:
            bytesToSend = f.read(1024)
            sock.send(bytesToSend)
            while bytesToSend != "":
                bytesToSend = f.read(1024)
                sock.send(bytesToSend)
© www.soinside.com 2019 - 2024. All rights reserved.