2012-07-05 8 views
5

Używam tych dwóch programów do komunikacji między dwoma komputerami, z których korzystam i nie zwracam niczego po żadnej ze stron. To po prostu działa bez wysyłania czegokolwiekKomunikacja między dwoma komputerami za pomocą gniazda Pythona

klient

import sys 
from socket import socket, AF_INET, SOCK_DGRAM 

SERVER_IP = '127.0.0.1' 
PORT_NUMBER = 5000 
SIZE = 1024 
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER)) 

mySocket = socket(AF_INET, SOCK_DGRAM) 

while True: 
     mySocket.sendto('cool',(SERVER_IP,PORT_NUMBER)) 
sys.exit() 

serwer

from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM 
import sys 
PORT_NUMBER = 5000 
SIZE = 1024 

hostName = gethostbyname('0.0.0.0') 

mySocket = socket(AF_INET, SOCK_DGRAM) 
mySocket.bind((hostName, PORT_NUMBER)) 

print ("Test server listening on port {0}\n".format(PORT_NUMBER)) 

while True: 
     (data,addr) = mySocket.recvfrom(SIZE) 
     print data 
sys.ext() 

Co mogę robić źle?

Odpowiedz

6

Problem polega na adres klienta:

SERVER_IP = '127.0.0.1' 

możliwość podłączania do komputera lokalnego i wysyłania danych, a serwer siedzi na innym IP. Musisz połączyć się z serwerem ip lub nazwą hosta.

Można to sprawdzić poprzez klient połączyć pierwszy (i nie, jeśli cant)

... 

import time 

mySocket = socket(AF_INET, SOCK_DGRAM) 
mySocket.connect((SERVER_IP,PORT_NUMBER)) 

while True: 
     mySocket.send('cool') 
     time.sleep(.5) 

Aktualizacja z uwag

Ponieważ jesteś na połączenie WiFi, który zakłada, że ​​oba te maszyny znajdują się w sieci lokalnej. Musisz znaleźć adres IP LAN serwera, aby określić go jako cel.

wiersza polecenia podejście do znajdowania IP

  • OSX/Linux: ifconfig
  • Windows: ipconfig /all
+0

użyłem podczas pobytu whatismyip.com i to daje taki sam wynik – user1340048

+0

@ user1340048: To twój publiczny adres IP. Jeśli nie skonfigurujesz routera do przekazywania ruchu na porcie do serwera, to nie zrobi ci to zbyt dobrze. Skorzystaj z lokalnej sieci ips. Czy te dwa urządzenia znajdują się w dwóch różnych lokalizacjach sieciowych? – jdi

+0

nie są one w tym samym połączeniu bezprzewodowym. Gdzie znajdę prawidłowy lokalny adres IP?Próbowałem używać SERVER_IP = '' – user1340048

0

Jeśli to nie działa nawet po zmianie IP_serwera na adres rzeczywistych serwera , sprawdź, czy zapora na twoim serwerze akceptuje ruch dla UDP na porcie 5000.

jeśli twój serwer jest linuxem machine, iptables -L pokażą ci reguły firewalla. iptables -F usunie wszystkie (!) reguły firewalla, abyś mógł sprawdzić, czy to pomaga. nie jest to ponowne uruchomienie.

+0

Nadal nie działa niestety, a zapora mówi, że pozwala na wszystko. – user1340048

0

Powinieneś zobaczyć adres LAN LAN podobny do tego: 192.168.1.102, który jest zwykłym lokalnym adresem routera WiFi. Na przykład, można zobaczyć następujący wiersz polecenia w systemie Windows za pomocą polecenia ipconfig:

C:\Users\jackc>ipconfig 

Windows IP Configuration 

Wireless LAN adapter Wireless Network Connection 3: 

    Media State . . . . . . . . . . . : Media disconnected 
    Connection-specific DNS Suffix . : 

Wireless LAN adapter Wireless Network Connection: 

    Connection-specific DNS Suffix . : 
    Link-local IPv6 Address . . . . . : fe80::ed97:91a4:9449:204b%13 
    IPv4 Address. . . . . . . . . . . : 192.168.8.106 
    Subnet Mask . . . . . . . . . . . : 255.255.255.0 
    Default Gateway . . . . . . . . . : 192.168.8.1 

Próbowałem następujący kod testowy, który pracuje dla mnie.

Klient:

#!/usr/bin/env python3 

import sys 
from socket import socket, AF_INET, SOCK_DGRAM 

SERVER_IP = '192.168.8.102' 
PORT_NUMBER = 5000 
SIZE = 1024 
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER)) 

mySocket = socket(AF_INET, SOCK_DGRAM) 
myMessage = "Hello!" 
myMessage1 = "" 
i = 0 
while i < 10: 
    mySocket.sendto(myMessage.encode('utf-8'),(SERVER_IP,PORT_NUMBER)) 
    i = i + 1 

mySocket.sendto(myMessage1.encode('utf-8'),(SERVER_IP,PORT_NUMBER)) 

sys.exit() 

Serwer:

#!/usr/bin/env python3 

from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM 
import sys 
PORT_NUMBER = 5000 
SIZE = 1024 

hostName = gethostbyname('0.0.0.0') 

mySocket = socket(AF_INET, SOCK_DGRAM) 
mySocket.bind((hostName, PORT_NUMBER)) 

print ("Test server listening on port {0}\n".format(PORT_NUMBER)) 

while True: 
    (data,addr) = mySocket.recvfrom(SIZE) 
    print data 
sys.exit() 
Powiązane problemy