繁体   English   中英

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

[英]How to send/receive data file over socket?

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

或者只发送一个 go:

c.sendall(msg[i])

请注意, send()将返回实际发送了多少字节(因为它不一定会发送所有字节),因此如果您想发送所有字节(通常是这种情况),请改用sendall()

我会尝试这样的事情:

import shutil

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM