2012-12-22 11 views
8

Pracuję nad skryptem, który przesyła dane między dwoma różnymi komputerami z dostępem do Internetu. Używam standardowego modułu gniazda Pythona. Działa dobrze, gdy uruchamiam zarówno klienta, jak i serwer na pojedynczym komputerze, ale nie jestem w stanie sprawić, aby te rzeczy działały, gdy działają na różnych komputerach.Python: wysyłanie danych między dwoma komputerami za pośrednictwem gniazd

Tutaj jest część mojego kodu serwera:

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

I tu jest częścią mojego kodu klienta:

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

Kiedy uruchomić te skrypty na dwóch różnych komputerach z dostępem do internetowej klient nie może się połączyć i wywołuje błąd, a serwer czeka na połączenia w nieskończoność.

Co robię źle?

+2

W jaki sposób są połączone te dwa komputery? Wszelkie routery/firewalle/urządzenia NAT na ścieżce. –

+0

Oba komputery są podłączone do różnych sieci WiFi –

+0

. Jak skonfigurowano te dwa routery Wi-Fi? –

Odpowiedz

7

Prawdopodobnie nie ma to związku z kodem, który wygląda dobrze. Raczej myślę, że to jest problem z używanymi adresami IP.

Jeśli komputery znajdują się w różnych sieciach, należy upewnić się, że przekazywany adres IP jest adresem dostępnym dla sieci. Zasadniczo oznacza to, że jeśli używany adres IP zaczyna się od 192.168.?.? wtedy używasz niewłaściwego adresu IP.

Można łatwo sprawdzić, uruchamiając polecenie:
(Windows): ipconfig
(Linux): ifconfig

Jeśli używasz prawidłowego adresu IP, wtedy bym sprawdzić ustawienia routera i/lub ustawienia zapory sieciowej, które mogą bardzo dobrze blokować numer portu, którego próbujesz użyć.

+1

Jestem prawie pewien, że jest to problem z konfiguracją, ponieważ router musiałby przekazywać port do adresu LAN serwera ... – l4mpi

+0

Problem rozwiązany. To był problem z routerem, który przekierowywał teraz pakiet danych na komputer, na którym skonfigurowano serwer. Zmieniłem go w ustawieniach routera i przekierowałem pakiet na prywatne IP tego komputera (192.168.1.35) i port 5000. Teraz działa dobrze. Dziękuję Ci bardzo :) –

Powiązane problemy