2011-07-08 275 views
0

我正在用Python編寫套接字編程,以便通過TCP發送/接收文件。如何通過套接字發送/接收數據文件?

雖然我發送/接收數據,但我發現它既沒有發送也沒有收到這部分文件。

以下是根據緩衝區的大小發送部分數據的部分。

msg[i] = file[i].read() 
    file[i].close() 
    while 1: 
    tdata[i], msg[i] = msg[i][:buf], msg[i][buf:] 
    c.send(tdata[i]) 

    if len(msg[i]) < buf: 
     break 

請幫我看看如何發送/接收完整的數據。

+0

該文件的哪一部分缺失?你在發件人或收件人處有任何錯誤嗎? –

回答

3

len(msg[i]) < buf時它會停止發送,所以數據的結束可能會丟失。

如果你想發送的所有味精[I],它的好做:

while msg[i]: 
    tdata[i], msg[i] = msg[i][:buf], msg[i][buf:] 
    c.sendall(tdata[i]) 

或只是把它一氣呵成:

c.sendall(msg[i]) 

注意send()將返回多少字節實際上被髮送(因爲它不一定會發送所有的字節),所以如果你想發送所有的(通常是這種情況),用sendall()來代替。

0

我會嘗試這樣的事:

import shutil 

shutil.copyfileobj(open('data'), c.makefile('wb')) 

這是SimpleHTTPServer模塊是如何做的。