如何通过套接字发送/接收数据文件?

时间:2011-07-08 21:47:35

标签: python file sockets data-transfer

我正在用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 

请帮我完整地发送/接收整个数据。

2 个答案:

答案 0 :(得分:3)

它会在len(msg[i]) < buf时停止发送,因此数据的结尾可能会丢失。

如果你想发送所有的msg [i],最好这样做:

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

或者只是一次发送:

c.sendall(msg[i])

请注意send()将返回实际发送的字节数(因为它不一定会发送所有字节),因此如果要发送所有字节(通常是这种情况),请使用{{1}而不是。

答案 1 :(得分:0)

我会尝试这样的事情:

import shutil

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

这就是SimpleHTTPServer模块的工作方式。