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



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

请告诉我如何完整地发送/接收整个数据

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()将返回实际发送的字节数(因为它不一定会发送所有字节),所以如果您想发送所有字节(通常是这种情况),请使用sendall()代替。

我会尝试这样做:

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

SimpleHTTPServer模块就是这样做的

相关内容

  • 没有找到相关文章

最新更新