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

0 投票
2 回答
1400 浏览
提问于 2025-04-16 21:08

我正在用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()

撰写回答