Python 如何通过套接字发送/接收数据文件?
我正在用Python编写一个套接字编程,以便通过TCP发送/接收文件 当我发送/接收数据时,我发现它既没有发送也没有接收部分文件 下面是根据缓冲区大小发送部分数据的部分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:
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模块就是这样做的。缺少文件的哪一部分?您是否在发送方或接收方收到任何错误?文件的哪一部分丢失了?您在发送者或接收者处是否有任何错误?