我正在用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模块就是这样做的