sockets: 111 Connection Refused durch Router --> umgehen?
Verfasst: Montag 27. Juli 2009, 13:18
Hallo zusammen,
ich habe in letzter Zeit ein wenig mit Sockets rumgespielt und bin dabei auf Probleme gestoßen. Zuerst einmal hier zwei minimalistische Beispiele:
Server
Client
Der Server wartet nur auf eine Verbindung und tauscht einmal Text mit dem Client aus. Das funktioniert prima auf localhost, wenn ich meiner Freundin eine der beiden Dateien schicke und wir es über das Internet testen, bekommen wir die Meldung: "Connection Refused" vom Client. Der Server meldet nichts und lauscht weiter auf Verbindungen.
(IP-Adresse in der connect und bind-Anweisung dementsprechend für den Test angepasst natürlich)
Meine Vermutung: Der Router (wir haben beide einen) hat den entsprechenden Port nicht freigeschaltet.
Das ist soweit kein Problem, aber hier kommt meine eigentliche Frage:
Es gab vor einigen Jahren mal ein P2P-Programm (ich weiß nicht mehr welches genau), für welches man seine Ports freischalten musste. Da ich damals einen sehr seltsamen Router hatte, habe ich das Programm direkt wieder deinstalliert und den Vorfall vergessen.
Einige Zeit später gab es dann eine neue Version des Programms und siehe da: auf einmal war es nicht mehr nötig die Ports freizuschalten. Irgendeine Software-Lösung hat das Router-Problem aus der Welt geschafft.
Wie war das möglich? Gibt es entsprechende socket-Optionen? Ich habe SOL_SOCKET --> SO_DONTROUTE ausprobiert, leider ohne Erfolg.
In Dokus und Foren habe ich nichts gefunden, was mir weiterhilft.
Hat da jemand Erfahrung?
Würde mich über Ideen und Ratschläge sehr freuen =)
ich habe in letzter Zeit ein wenig mit Sockets rumgespielt und bin dabei auf Probleme gestoßen. Zuerst einmal hier zwei minimalistische Beispiele:
Server
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
if __name__ == '__main__':
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('', 50007))
server.listen(1)
(client, caddr) = server.accept()
print caddr, "connected."
client.send("Hello client!")
print client.recv(1024)
server.close()
print "done..."
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
if __name__ == '__main__':
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('', 50007))
print client.recv(1024)
client.send("Hello there, server!")
client.close()
print "done..."
(IP-Adresse in der connect und bind-Anweisung dementsprechend für den Test angepasst natürlich)
Meine Vermutung: Der Router (wir haben beide einen) hat den entsprechenden Port nicht freigeschaltet.
Das ist soweit kein Problem, aber hier kommt meine eigentliche Frage:
Es gab vor einigen Jahren mal ein P2P-Programm (ich weiß nicht mehr welches genau), für welches man seine Ports freischalten musste. Da ich damals einen sehr seltsamen Router hatte, habe ich das Programm direkt wieder deinstalliert und den Vorfall vergessen.
Einige Zeit später gab es dann eine neue Version des Programms und siehe da: auf einmal war es nicht mehr nötig die Ports freizuschalten. Irgendeine Software-Lösung hat das Router-Problem aus der Welt geschafft.
Wie war das möglich? Gibt es entsprechende socket-Optionen? Ich habe SOL_SOCKET --> SO_DONTROUTE ausprobiert, leider ohne Erfolg.
In Dokus und Foren habe ich nichts gefunden, was mir weiterhilft.
Hat da jemand Erfahrung?
Würde mich über Ideen und Ratschläge sehr freuen =)