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 =)