【发布时间】: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
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何读取大文件(socket编程和python)? - Python技术站