Seite 1 von 1

Probleme mit Internet Socket

Verfasst: Sonntag 23. August 2009, 13:53
von theliquidwave
Hi.
Habe mir heute mal ein kleines Script geschrieben, mit dem ich Dateien zwischen 2 PCs austauschen kann. Lokal funktioniert bei mir alles soweit, alles bestens.
Sobald ich jedoch versuche, auf meine Internet IP zu verbinden, kommt folgender Fehler:

Code: Alles auswählen

socket.error: [Errno 10061] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte
Die Meldung kommt wohl von Winsock, hört sich jedenfalls danach an. Ich kann mir nicht erklären wie es sein kann. Port ist im Router und in der Windows Firewall freigegeben, dennoch scheitert es.

Ich frage mich auch, wieso es bei anderen Diensten auch ohne irgendwelche Portfreigaben funktioniert, z.B. ICQ, STEAM oder Skype. Es gibt so viele Programme die Sockets benutzen und bei keinem musste ich bisher einen Port freigeben. Kann ich das auch irgendwie in mein Script einbauen?

EDIT: Mit dieser Zeile wird der Socket gestartet:

Code: Alles auswählen

socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Gruß und Danke :)

Verfasst: Sonntag 23. August 2009, 16:46
von Leonidas
Versuchst du dich auf den Socket zu verbinden (wegen "Internet IP") oder auf dem Socket zu lauschen? ICQ funktioniert etwa, weil es sich auf externe IPs verbinden, es akzeptiert ja selbst keine Verbindungen (von Dateitransfers mal abgesehen).

Bist du hinter einem NAT?

Verfasst: Sonntag 23. August 2009, 18:04
von theliquidwave
Achso.
Ich habe halt einen Clienten und einen Server. Der Client benutzt socket.connect und der Server socket.listen und socket.accept. Dann benutze ich zum Senden / Empfangen halt .send und .recv, das war's.

Mein PC hängt nur hinter einem gewöhnlichem Router (T-Online Speedport W700 V) und hinter der standardmäßigen Windows Firewall.

Gruß und Danke

Verfasst: Sonntag 23. August 2009, 19:07
von Leonidas
Na dann ists ja klar. Unter deiner "Internet IP" kann man den Server nicht erreichen, weil dein Router kein Port-Forwarding bietet und lokal kann man deinen Server nicht erreichen, weil er auf keiner lokal erreichbaren IP lauscht. Du musst also dem Server die IP 0.0.0.0 (m.a.W: alle IPs) geben, dann sollte es zumindest lokal klappen.

Verfasst: Sonntag 23. August 2009, 19:08
von Defnull
Die Windows Firewall verhindert eingehende Verbindungen.

Ein Router funktioniert (meistens) ebenfalls nur in eine Richtung.

Verfasst: Sonntag 23. August 2009, 19:59
von theliquidwave
Hi.
Ich hab doch extra geschrieben dass ich den Port im Router und in der Firewall freigegeben habe. Es muss funktionieren, schließlich kann ich auch problemlos Server für Spiele wie CS:S oder Teeworlds starten und jedermann kann darauf connecten.

Beim Socket binde ich die IP bereits an 0.0.0.0, bzw. übergebe beim Host einfach "", so wie es in vielen Beispielscripten gemacht wurde.

Gruß und Danke

Verfasst: Montag 24. August 2009, 15:26
von Leonidas
Wer weiß was du mit "freigeben" meinst. Für mich ist "weiterleiten"/"forwarden" was anderes als freigeben. Und vorher hast du gemeint du bindest an die Internet-IP und jetzt ists auf einmal 0.0.0.0. Dann brauchst du dich auch nicht wundern, wenn die Antworten nicht so hilfreich sind.

Du kannst aber auch mal Wireshark/Packetyzer laufen lassen, vielleicht findest du da Ungereimtheiten.