Frage
ich muss Verbindungsserver <=> Client erstellen. Ich benutze diesen Code: Server:
import socket
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.send(data)
conn.close()
Client:
import socket
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)
Es funktioniert gut! Aber wenn Server auf dem Computer erstellt, die nicht Router hat. Wenn u-Router haben, bevor Server erstellen sollten Sie 50007-Port Ihr Modem öffnen. Wie kann ich Server auf allen Computern erstellen, ohne Port ermöglicht? Torrent-Clients tun es irgendwie. Danke.
Lösung
Die Frage ist ein wenig verwirrend, aber ich werde versuchen zu helfen. Grundsätzlich, wenn die Port (50007) auf dem Server-Rechner durch eine Firewall blockiert wird, wird es nicht möglich sein, eine TCP-Verbindung vom Client zu machen. Das ist der Zweck des Firewall. Viele Protokolle (SIP und Bittorrent zum Beispiel) verwenden Firewall- und NAT-Navigationsstrategien, aber das ist ein komplexes Thema, das Sie kann weitere Informationen erhalten, hier . Sie werden feststellen, dass Bittorrent effektiv zu nutzen, können Sie die Portweiterleitung für NAT aktivieren und entsperren Port für Firewalls reicht. Auch Bittorrent verwendet TCP-Verbindungen für die meisten Datenübertragung. Hier ist das Mitnehmen:
Beachten Sie zunächst, dass es zwei Arten von Verbindungen, die das BitTorrent-Programm machen muss:
- Outbound HTTP-Verbindungen an den Tracker, in der Regel auf Port 6969.
- Eingehende und ausgehende Verbindungen zu den Peer-Maschinen, in der Regel auf Port 6881 und höher.
Andere Tipps
Sehr schwierig, Ihre Frage zu verstehen ...
(...) Torrent-Clients tun es irgendwie.
Die Torrent-Clients können dies nur tun, wenn das Router - Internet-Gateway-Gerät (IGD) - das unterstützt Abschnitt über NAT-Traversal .