Python 通过UDP套接字发送文件

Python 通过UDP套接字发送文件,python,Python,我正在使用python的UDP套接字发送文件。在receiver sidefile_receiver.py,您需要中断程序的ctrl-c,以便在最后接收文件。因此,我将settimeout设置为2秒,以便在完全接收到数据后,程序自动退出。如果我知道的很清楚,您不能在UDP中设置非阻塞套接字。克服这个问题的最好办法是什么 文件_sender.py #!/usr/bin/env python from socket import * import sys s = socket(AF_INET,S

我正在使用python的UDP套接字发送文件。在receiver sidefile_receiver.py,您需要中断程序的ctrl-c,以便在最后接收文件。因此,我将settimeout设置为2秒,以便在完全接收到数据后,程序自动退出。如果我知道的很清楚,您不能在UDP中设置非阻塞套接字。克服这个问题的最好办法是什么

文件_sender.py

#!/usr/bin/env python

from socket import *
import sys

s = socket(AF_INET,SOCK_DGRAM)
host ="localhost"
port = 9999
buf =1024
addr = (host,port)

f=open (sys.argv[1], "rb") 
data = f.read(buf)
while (data):
    if(s.sendto(data,addr)):
        print "sending ..."
        data = f.read(buf)
s.close()
f.close()
文件_receiver.py

#!/usr/bin/env python

from socket import *
import sys
import select

host="0.0.0.0"
port = 9999
s = socket(AF_INET,SOCK_DGRAM)
s.bind((host,port))

addr = (host,port)
buf=1024


f = open("op.pdf",'wb')
data,addr = s.recvfrom(buf)


while(data):
    f.write(data)
    s.settimeout(2)
    data,addr = s.recvfrom(buf)

f.close()
s.close()

谢谢。

由于UDP连接较少,因此接收方无法直接知道发送方何时完成发送

您可以解决这个问题,例如,当发送方发送完一个特殊的数据包时,该数据包表示不会有更多的数据包跟随


然而,我强烈建议你不要这样做;UDP不保证数据包的传递——数据包可能丢失、复制或无序传递。显然,对于大多数文件来说,如果它们缺少一个部分,或者重新排序,等等,这是不可接受的。。如果要在主机之间传输文件,我认为最好使用TCP。

因为UDP连接较少,所以接收方无法直接知道发送方何时完成了发送

您可以解决这个问题,例如,当发送方发送完一个特殊的数据包时,该数据包表示不会有更多的数据包跟随

然而,我强烈建议你不要这样做;UDP不保证数据包的传递——数据包可能丢失、复制或无序传递。显然,对于大多数文件来说,如果它们缺少一个部分,或者重新排序,等等,这是不可接受的。。如果您想在主机之间传输文件,我认为您最好使用TCP