2012-12-22 14 views
8

Sto lavorando a uno script che trasmette i dati tra due computer distinti con accesso a Internet. Sto usando il modulo standard per socket di Python. Funziona bene quando eseguo sia client che server su un singolo computer ma non riesco a far funzionare le cose quando vengono eseguite su computer diversi.Python: invio di dati tra due computer tramite prese

Ecco una parte del mio codice del server:

import socket, time,os, random 

class Server(): 
    def __init__(self,Adress=('',5000),MaxClient=1): 
     self.s = socket.socket() 
     self.s.bind(Adress) 
     self.s.listen(MaxClient) 
    def WaitForConnection(self): 
     self.Client, self.Adr=(self.s.accept()) 
     print('Got a connection from: '+str(self.Client)+'.') 


s = Server() 
s.WaitForConnection() 

E qui è una parte del mio codice cliente:

import socket 

class Client(): 
    def __init__(self,Adress=("Here is the IP of the computer on which the \ 
            server scrip is running",5000)): 
     self.s = socket.socket() 
     self.s.connect(Adress) 

c = Client() 

Quando eseguo questi script su due computer con accesso a Internet il il client non è in grado di connettersi e genera un errore e il server è in attesa di connessioni per sempre.

Cosa sto sbagliando?

+2

Come sono collegati questi due computer? Qualsiasi router/firewall/dispositivi NAT sul percorso. –

+0

Entrambi i computer sono collegati a diversi WiFi –

+0

Come sono configurati questi due router Wi-Fi? –

risposta

7

Questo probabilmente non ha a che fare con il tuo codice che sembra a posto. Penso piuttosto che questo è un problema con gli indirizzi IP che stai usando.

Se i computer si trovano su reti diverse, è necessario assicurarsi che l'indirizzo IP che si sta passando sia quello accessibile alla rete. Fondamentalmente ciò significa che se l'IP che stai usando inizia con 192.168.?.? allora stai usando l'IP sbagliato.

Si può facilmente controllare questo eseguendo il comando:
(finestre): ipconfig
(linux): ifconfig

Se stai usando un indirizzo IP corretto, allora mi piacerebbe verificare le impostazioni del router e/o le impostazioni del firewall che possono benissimo bloccare il numero di porta che stai cercando di utilizzare.

+1

Sono abbastanza sicuro che si tratta di un problema di configurazione perché il router avrebbe bisogno di inoltrare la porta all'indirizzo lan del server ... – l4mpi

+0

Problema risolto. Era un problema con un router che ora stava reindirizzando il pacchetto di dati al computer su cui era stato configurato il server. L'ho modificato nelle impostazioni del router e l'ho fatto reindirizzare il pacchetto all'IP privato di questo computer (192.168.1.35) e alla porta 5000. Ora funziona correttamente. Grazie mille :) –

Problemi correlati