Ich versuche, einen Stop-and-Wait-Algorithmus zu implementieren. Ich habe ein Problem bei der Implementierung des Timeouts beim Absender. Während ich auf einen ACK vom Empfänger warte, verwende ich die Funktion recvfrom(). Dies macht jedoch das Programm im Leerlauf, und ich kann das Zeitlimit für die erneute Übertragung nicht einhalten.Python-Implementierung für Stop-and-Wait-Algorithmus
hier ist mein Code:
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()
Sie sollten wirklich nicht eine leere except-Klausel verwenden, sofern Sie nicht die Ausnahme sind Erneutes Auslösen. Du weißt, es wird ein socket.timeout sein, also warum nicht nur diesen fangen? – drxzcl
@drxzcl gerade hinzugefügt, dass;) – cmd
'während nicht bestätigt 'statt' während bestätigt 'oder habe ich etwas verpassen? – mtahmed