2009-04-21 1 views
5

Devo creare il server di connessione < => client. Io uso questo codice: Server:Python + socket

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

Cliente:

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) 

funziona benissimo! Ma se il server è stato creato sul computer che non ha router. Se si dispone di router, prima di creare il server è necessario aprire la porta 50007 sul modem. Come posso creare un server su tutti i computer senza abilitare la porta? I client Torrent lo fanno in qualche modo. Grazie.

risposta

7

La domanda è un po 'confusa, ma cercherò di dare una mano. Fondamentalmente, se la porta (50007) è bloccata sulla macchina server da un firewall, NON sarà possibile effettuare una connessione TCP dal client. Questo è lo scopo del firewall. Molti protocolli (SIP e BitTorrent ad esempio) utilizzano le strategie di navigazione di firewall e NAT, ma questo è un argomento complesso che è possibile get more information on here. Si noterà che per utilizzare efficacemente bittorrent, è necessario abilitare il port forwarding per NAT e sbloccare gli intervalli di porte per i firewall. Inoltre, bittorrent usa connessioni TCP per la maggior parte del trasferimento dei dati. Ecco l'asporto:

In primo luogo, notare che ci sono due tipi di connessioni che il programma BitTorrent deve fare:

  • connessioni HTTP in uscita al tracker, di solito sulla porta 6969.
  • Inbound e connessioni in uscita verso le macchine peer, solitamente sulla porta 6881 e successive.
+0

> devi abilitare il port forwarding per NAT e sbloccare gli intervalli di porte per i firewall Posso farlo usando python? O non è una parte di programmazione? – Ockonal

+0

Non sarebbe una cosa programmatica, a meno che il firewall non fosse basato sul software. Questo è un genere di cose di rete sys-admin. –

2

molto difficile da capire la tua domanda ...

(...) Torrent-clienti lo fanno in qualche modo.

I client Torrent possono eseguire questa operazione solo quando il router - Dispositivo gateway Internet (IGD) - supporta uPNP protocol. La parte interessante per il tuo problema è the section about NAT traversal.