【问题标题】:How to read large file (socket programming and python)?如何读取大文件(socket编程和python)?
【发布时间】:2023-04-07 18:11:01
【问题描述】:

我是套接字编程和 python 的初学者。我想学习如何从服务器向客户端发送一个大文本文件(例如,> 5MB)。我不断收到一个错误,上面写着

Traceback (most recent call last):
  File "fserver.py", line 50, in <module>
    reply = f.read()
ValueError: Mixing iteration and read methods would lose data

以下是我的部分代码。有人可以看看并给我一些关于如何解决这个问题的提示吗?感谢您的宝贵时间。

我的服务器.py

#validate filename
        if os.path.exists(filename):
            with open(filename) as f:
                for line in f:
                    reply = f.read()
                    client.send(reply)
            #f = open(filename, 'r')
            #reply = f.read()
            #client.send(piece)
        else:
            reply = 'File not found'
            client.send(reply)

myclient.py

while True:
    print 'Enter a command: list or get <filename>'
    command = raw_input()
    if command.strip() == 'quit':
        break
    client_socket.send(command)

    data = client_socket.recv(socksize)
    print data

【问题讨论】:

  • 一旦你解决了这个问题,你的代码中还有一些其他的问题。您只在客户端上执行一个recv,这不太可能获得整个文件。而且,即使是这样,您也无法知道这是否是整个文件。您可能想要一个稍微复杂的协议,首先发送一个长度,然后客户端继续调用recv,直到它获得与该长度一样多的字节。另外,客户端需要一些方法来区分错误和实际文件内容,例如“找不到文件”。而且你需要在服务器中调用sendall,而不是send

标签:
python
file
sockets
io
file-transfer