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