UDP Sockets

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Captain_Obvious
User
Beiträge: 1
Registriert: Sonntag 9. Februar 2014, 17:41

Hallo alle Zusammen,

ich bin gerade dabei mich in Sockets einzuarbeiten und bin dabei auf ein etwas nerviges Problem gestoßen:
mein Skript funktioniert generell vom Code her, allerdings kommen die Daten je nach Benutzer des Skripts an bzw nicht an.
Ich kann Daten zu einem Freund von mir schicken der genau dasselbe Skript laufen hat und er empfängt die Daten.
Das Programm nimmt die Daten und schickt sie direkt an mich zurück.
Allerdings kommen diese nie bei mir an. Ich hab inzwischen schon diverses ausprobiert von port-forwarding, "exposed-host" und Abschalten aller Firewalls, ohne jeglichen erfolg.
Senden kann jeder den ich das ausprobieren lasse, Empfangen nur manche.
Ich bin relativ Ratlos was des Problem angeht...
Bei der verwendung von udp ist zwar nicht gegeben, dass die Pakete ganz oder in der Richtigen Reihenfolge ankommen aber bei mir kommen einfach konsequent nie welche an.

Code sieht wie folgt aus:
(Ja ich bin mir bewusst, dass manches etwa hingepfuscht ist, daran sollte es allerdings nicht liegen da es generell funktionieren kann)

Code: Alles auswählen

import socket

running = True

print "UDP-test"
print

ip = "127.0.0.1"             # hier steht normalerweise die Adresse des empfängers
nachricht = raw_input("Nachricht: ")


while running:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    port = 50026
    all_addr = [("",0),("",0),("",0)]

    try: 
        s.bind(("", port))
        s.sendto(nachricht, (ip, port)) 
        while running: 
            daten, addr = s.recvfrom(1024) 
            print "[%s] port:%s message: %s" % (addr[0],addr[1], daten) #addr[0] enthaelt IP, addr[1] port
            
            for i in range(3):
                if (all_addr[i][0] == ""):
                    all_addr[i] = addr
                    break
                elif(all_addr[i][0] != addr[0]):
                    s.sendto(daten, (all_addr[i][0], all_addr[i][1]))
            if (daten == "exit"):
                running = False
            s.sendto(daten, (addr[0], addr[1]))

    finally: 
        s.close()
        

Falls das was hilft: bei ner Fritzbox und bei nem netgear kommt nix an. Bei nem Speedport z.B gehts.

Danke im Voraus
Euer Captain
Zuletzt geändert von Anonymous am Sonntag 9. Februar 2014, 19:45, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Antworten