Probleme mit Internet Socket

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

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 :)
Grüßle.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

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
Grüßle.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Die Windows Firewall verhindert eingehende Verbindungen.

Ein Router funktioniert (meistens) ebenfalls nur in eine Richtung.
Bottle: Micro Web Framework + Development Blog
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

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
Grüßle.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten