我是套接字編程和python的初學者。我想了解如何從服務器向客戶端發送大型文本文件(例如> 5MB)。我不斷收到一個錯誤,說如何讀取大文件(套接字編程和python)?
Traceback (most recent call last):
File "fserver.py", line 50, in <module>
reply = f.read()
ValueError: Mixing iteration and read methods would lose data
下面是我的部分代碼。有人可以看看,並給我一些關於如何解決這個問題的提示嗎?感謝您的時間。
myserver.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'。 – abarnert