【问题标题】:How to send/receive data file over socket?如何通过套接字发送/接收数据文件?
【发布时间】:2011-07-08 21:47:35
【问题描述】:

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

请帮助我了解如何完全发送/接收整个数据。

【问题讨论】:

  • 文件的哪一部分丢失了?发送方或接收方是否有任何错误?

标签: python file sockets data-transfer


【解决方案1】:

len(msg[i]) &lt; 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()

【讨论】:

    【解决方案2】:

    我会尝试这样的:

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 2021-09-15
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2020-02-29
      • 2012-06-09
      相关资源
      最近更新 更多