我正在用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
请帮我完整地发送/接收整个数据。
答案 0 :(得分:3)
它会在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()
将返回实际发送的字节数(因为它不一定会发送所有字节),因此如果要发送所有字节(通常是这种情况),请使用{{1}而不是。
答案 1 :(得分:0)
我会尝试这样的事情:
import shutil
shutil.copyfileobj(open('data'), c.makefile('wb'))
这就是SimpleHTTPServer模块的工作方式。