PythonのUDPソケットを使用してファイルを送信しています。受信側(file_receiver.py)では、最後にファイルを受信するために、プログラムを中断(ctrl-c)する必要があります。したがって、データが完全に受信されたら自動的に終了するようにプログラムするために、settimeoutを2秒間設定しました。私がよく知っているなら、UDPでノンブロッキングソケットを設定することはできません。この問題を克服するための最良の方法は何ですか。
file_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()
file_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()
ありがとう。