2011-07-08 155 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模块是如何做的。