如何通过套接字发送/接收数据文件?
我正在用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
请帮我一下,怎么才能完整地发送和接收所有的数据。
2 个回答
0
我会试试这样的做法:
import shutil
shutil.copyfileobj(open('data'), c.makefile('wb'))
这就是SimpleHTTPServer模块是怎么做的。
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()
会返回实际发送的字节数(因为它不一定会把所有数据都发送出去),所以如果你想确保全部发送(通常都是这样),最好使用 sendall()
。