2012-07-05 29 views
5

Estoy usando estos dos programas para comunicarme entre dos de mis computadoras, una en la que estoy conectado y no estoy devolviendo nada a ningún lado. Sólo se ejecuta sin enviar nadaComunicación entre dos computadoras usando el socket python

cliente

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

servidor

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

¿Qué podría estar haciendo mal?

Respuesta

6

El problema está en la dirección de su cliente:

SERVER_IP = '127.0.0.1' 

Va a conectarse a la máquina local y el envío de datos, mientras que su servidor está sentado sobre una IP diferente. Necesita conectarse a los servidores ip o nombre de host.

Usted puede verificar esto haciendo que el cliente conecte primero (y fallar si Cant)

... 

import time 

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

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

actualización de los comentarios

Debido a que usted está en una conexión Wi-Fi, que implica que tanto éstos la máquina está en la red local. Debe encontrar la dirección IP de la LAN del servidor, para especificarlo como el objetivo.

enfoque de línea de comandos para encontrar su IP

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

utilicé la dirección en la whatismyip.com y se da el mismo resultado – user1340048

+0

@ user1340048: Esa es su IP pública. A menos que haya configurado su enrutador para reenviar el tráfico de un puerto a su máquina servidor, eso no le hará mucho bien. Use los ips de la red local. ¿Estas dos máquinas están en dos ubicaciones de red diferentes? – jdi

+0

no, están en la misma conexión inalámbrica. ¿Dónde encuentro la dirección IP local correcta?Intenté usar SERVER_IP = '' – user1340048

0

Si esto no funciona, incluso después de cambiar el IP_SERVIDOR a la dirección del servidor real , compruebe si el cortafuegos de su servidor acepta tráfico para UDP en el puerto 5000.

si su servidor es un linux machine, iptables -L mostraría las reglas del firewall. iptables -F eliminaría todas las reglas (!) de firewall, para que pueda probar si eso ayuda. esto no es reinicio continuo.

+0

Todavía no funciona desafortunadamente y el firewall dice que permite todo. – user1340048

0

Debería ver una dirección IP de LAN como esta: 192.168.1.102 que es la dirección local predeterminada del enrutador WiFi habitual. Por ejemplo, verá el siguiente en el intérprete de comandos de Windows mediante el uso de 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 

He probado el siguiente código de prueba que funciona para mí.

Cliente:

#!/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() 

Servidor:

#!/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() 
Cuestiones relacionadas