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

Python 如何通过套接字发送/接收数据文件?,python,file,sockets,data-transfer,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:

我正在用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 
msg[i]=文件[i].read()
文件[i].close()
而1:
tdata[i],msg[i]=msg[i][:buf],msg[i][buf:]
c、 发送(tdata[i])
如果len(msg[i])

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

len(msg[i])
时,它将停止发送,因此数据结尾可能丢失

如果您想发送所有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()

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

如果您想发送所有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模块就是这样做的。

我想尝试以下方法:

import shutil

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

SimpleHTTPServer模块就是这样做的。

缺少文件的哪一部分?您是否在发送方或接收方收到任何错误?文件的哪一部分丢失了?您在发送者或接收者处是否有任何错误?