停止して待機するアルゴリズムを実装しようとしています。送信側でのタイムアウトの実装に問題があります。受信者からの ACK を待っている間、recvfrom() 関数を使用しています。ただし、これによりプログラムがアイドル状態になり、タイムアウトに従って再送信できません。
ここに私のコードがあります:
import socket
import time
mysocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
ACK= " "
userIn=raw_input()
if not userIn : break
mysocket.sendto(userIn, ('127.0.0.01', 88))
ACK, address = mysocket.recvfrom(1024) #the prog. is idle waiting for ACK
future=time.time()+0.5
while True:
if time.time() > future:
mysocket.sendto(userIn, ('127.0.0.01', 88))
future=time.time()+0.5
if (ACK!=" "):
print ACK
break
mysocket.close()