【问题标题】:Python Socket File Transfer Send -While loop error [closed]Python Socket文件传输发送-While循环错误[关闭]
【发布时间】: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


【解决方案1】:

我了解客户端无法下载文件,因为它没有从服务器发送文件。 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)

【讨论】:

  • 谢谢,成功
猜你喜欢
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2016-03-15
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多