Problem mit UDP Paketen
Verfasst: Montag 9. Juli 2012, 11:29
Hallo,
ich bin noch neu in der Socketprogrammierung daher hoffe ich dass die Frage nicht zu banal ist, ich habe folgende Gegebenheiten:
Im Netzwerk befinden sich Teilnehmer die per UDP Boradcast an den Port 6811 getriggert werden ihre ID zu senden.
dies habe ich mit Python schon realisiert, jetzt möchte ich eine Liste der IPs aller antwortenden Teilnehmern speichern. Leider kommen nicht alle Antworten bei Python an.
Wenn ich Wireshark mitlaufen lasse sehe ich dass die Antworten von allen Teilnehmern auf jeden Fall gesendet werden, ich würde jetzt mal vermuten dass wenn Wireshark die Pakete sieht sie auch 100% an meinem Netzwerkinterface ankommen und somit auch an Python geschickt werden.
hier ist mein Code, ich habe den Broadcast zum testen in eine Schleife gepackt, die ich 4 mal durchlaufen lasse, ich dachte damit könnte ich alle Teilnehmer erwischen, funktioniert aber nicht:
das ganze läuft auf einer Win XP Maschine.
Was mich interessieren würde, wenn ich recvfrom() ausführe
was passiert dann wenn mehrere Pakete von verschiedenen Teilnehmern unmittelbar hintereinander eintreffen, verwirft Python einfach alle bis auf das erste oder werden diese zwischengespeichert und können mit einer anderen Anfrage abgerufen werden??
Vielen Dank für eure Hilfe
ich bin noch neu in der Socketprogrammierung daher hoffe ich dass die Frage nicht zu banal ist, ich habe folgende Gegebenheiten:
Im Netzwerk befinden sich Teilnehmer die per UDP Boradcast an den Port 6811 getriggert werden ihre ID zu senden.
dies habe ich mit Python schon realisiert, jetzt möchte ich eine Liste der IPs aller antwortenden Teilnehmern speichern. Leider kommen nicht alle Antworten bei Python an.
Wenn ich Wireshark mitlaufen lasse sehe ich dass die Antworten von allen Teilnehmern auf jeden Fall gesendet werden, ich würde jetzt mal vermuten dass wenn Wireshark die Pakete sieht sie auch 100% an meinem Netzwerkinterface ankommen und somit auch an Python geschickt werden.
hier ist mein Code, ich habe den Broadcast zum testen in eine Schleife gepackt, die ich 4 mal durchlaufen lasse, ich dachte damit könnte ich alle Teilnehmer erwischen, funktioniert aber nicht:
Code: Alles auswählen
def sendBroadcast(self):
ipList=[]
b=0
while 1:
b=b+1
s = socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET,SO_BROADCAST,SOL_UDP)
s.sendto('\x00\x00\x00\x00\x00\x11',('255.255.255.255',6811))
usedPort=s.getsockname()[1] #get Port number the Broadcast has been sent from
s.close()
host = ""
buf = 2048
addr = (host,usedPort)
UDPSock = socket(AF_INET,SOCK_DGRAM, SOL_UDP)
UDPSock.bind(addr)
print "check for received data"
data,addr = UDPSock.recvfrom(buf)
print "received data"
if data:
double=0
if ipList:
for a in range(len(ipList)):
if addr[0]==ipList[a]:
double=1
print "ip is already in list"
break
else:
double=0
if double==0:
print "appending"
ipList.append(addr[0])
print "\
Received message '", data,"'"
print "closing receive socket"
UDPSock.close()
if b==4:
break
Was mich interessieren würde, wenn ich recvfrom() ausführe
Code: Alles auswählen
data,addr = UDPSock.recvfrom(buf)
Vielen Dank für eure Hilfe