Foros del Web » Programando para Internet » Python »

sockets en Python

Estas en el tema de sockets en Python en el foro de Python en Foros del Web. Hola a todos, He hecho el siguiente programa cliente servidor: servidor.py @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original # -*- coding: utf-8 -*- import socket   ...
  #1 (permalink)  
Antiguo 13/06/2010, 04:26
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
sockets en Python

Hola a todos,

He hecho el siguiente programa cliente servidor:

servidor.py
Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2. import socket
  3.  
  4. s = socket.socket()
  5. s.bind(("xxxxxxx",9999))
  6. s.listen(10)
  7.  
  8. cliente1, addr = s.accept()
  9. print "Recibo conexion de "+str(addr[0]) + ": " + str(addr[1])
  10. cliente1.send("1")
  11. cliente2, addr1 = s.accept()
  12. print "Recibo conexion de "+str(addr1[0]) + ": " + str(addr1[1])
  13. cliente2.send("0")
  14.  
  15. c = 1
  16. cnt = 0
  17.  
  18. while True:
  19.   if c == 1:
  20.     recibido = cliente1.recv(1024)
  21.     cliente2.send(recibido)
  22.     c = 2
  23.   else:
  24.     recibido = cliente2.recv(1024)
  25.     cliente1.send(recibido)
  26.     c = 1
  27.   if recibido == "by":
  28.     cliente1.send("fin")
  29.     cliente2.send("fin")
  30.     break;
  31.   cliente1.send("seguir")
  32.   cliente2.send("seguir")
  33.  
  34. print "adios"
  35. cliente1.close()
  36. cliente2.close()
  37. s.close()

cliente.py:
Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2. import socket
  3.  
  4. s = socket.socket()
  5.  
  6. s.connect(("xxxxxxxxx",9998))
  7.  
  8. var = int(s.recv(1024))
  9. if var: print "Empiezas ha hablar"
  10. else: print "Esperate hasta que te hablen"
  11.  
  12. while True:
  13.   if var:
  14.     mensaje = raw_input("Mensage a enviar: ")
  15.     s.send(mensaje)
  16.     var = 0
  17.   else:
  18.     msg = s.recv(1024)
  19.     addr = "otro"
  20.     print "Mensage de "+addr+" "+msg
  21.     var = 1
  22.    
  23.   continuar = s.recv(1024)
  24.   if (continuar == "fin"): break

El programa en si funciona desde diferentes ordenadores, pero dentro de mi red es decir utilizando mi internet, pero desde ordenadores con diferente internet no...
a que puede ser debido esto? inicialmente creia que era pq el puerto 9998 de mi router no estaba abierto, pero tampoco es que tenga conocimiento sobre redes asi que no se.

Donde pone xxxxx pongo la direccion que me sale cuando pongo en la consola de linux ifconfig en el aparatado inet,y cuando estoy en windows pongo ipconfig y lo que me sale en direccion IPv4

Alguien me podria decir como proceder para que me funcionara de ordenador a ordenaror, sin el mismo internet?


Saludos!!!
  #2 (permalink)  
Antiguo 13/06/2010, 07:57
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: sockets en Python

Estoy realmente confundido con eso de otra Internet, por que a mi parecer solo existe un Internet.

Lo que tienes que hacer es probar lo siguiente:
1.- Si es remoto, tienes que abrir el puerto para el servidor. (Puedes hacerlo usando la configuración web de tu router)
2.- Usa IP publicas en vez de IP locales. (Para saber tu IP publica puedes hacerlo desde una pagina web)
  #3 (permalink)  
Antiguo 13/06/2010, 08:47
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sockets en Python

Bueno creia que con lo que habia dicho quedaba claro. Pero al parecer creia mal. Pero gracias.

Si utilizo la ip publica con el puerto 100 por ejemplo, me salta el errno: 99 Cannot assing requested address


Y para abrir el puerto del ruter, abri uno, con la direcion que me salia en el ipconfig pero no funcionava remotamente.
  #4 (permalink)  
Antiguo 13/06/2010, 10:03
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: sockets en Python

Otra cosa, el puerto del cliente y del servidor es el mismo.
  #5 (permalink)  
Antiguo 13/06/2010, 11:33
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sockets en Python

sips siempre que lo cambio en uno la cambio en otro, habeces ago pruevas con amigos desde sus casa y tambien lo cambio.

No se pq desde mi casa con diferentes ordenadores si que ba, y cuando le doy un cliente a un amigo, desde su casa no accede al mio... donde va la xxxx suelo poner una que empieza:

192.168.1.*
  #6 (permalink)  
Antiguo 13/06/2010, 18:38
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: sockets en Python

Eso es una IP privada, necesitas la IP publica. Como te dije la puedes obtener en la pagina.
  #7 (permalink)  
Antiguo 13/06/2010, 23:21
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sockets en Python

ok, pero la publica, tiene puertos especiales, o algo, pq pongo la publica, (la que me dice la pagina), y me da el error 99


Mercy por la paciencia.... xdxd
  #8 (permalink)  
Antiguo 14/06/2010, 07:03
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: sockets en Python

Si usas la publica tienes que abrir el puerto por donde escucha. De otra forma no vas a poder conectarla.
  #9 (permalink)  
Antiguo 14/06/2010, 08:09
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sockets en Python

Ya, pero me peta el servidor, no el cliente, me peta al poner a escuchar el servidor, y como hago para que en el router se abra un determinado puerto, pq lo hago desde un sitio que pone, LAN, y virtual server, y alli pongo el puerto externo y el interno, pongo el mismo, pero despues me pide que le ponga un numero determinado, y me pone el comienzo del numero y es el siguiente:

192.168.1.* , lo que os puse, se que es para ip local , pero no se, como abrir un puerto determinad para la ip publica, pero como hos he dicho el servidor me peta con ese error.


En definitiva como abro el puerto para que escuche?

Mercy!!
  #10 (permalink)  
Antiguo 14/06/2010, 11:07
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: sockets en Python

Tengo que admitir que no he leído el tema en detalle, pero me parece que lo que te falta es ir a la configuración del router y hacer un redireccionamiento (forwarding). Cualquier router te permite decir "para conexiones entrantes al puerto X, reenvía los paquetes a la máquina Y".
Resultado: un cliente se conecta a tu IP pública, y el router deriva los paquetes a la IP privada que corresponda.

El detalle de configuración depende del router, todos lo hacen ligeramente diferente.


Saludos.
  #11 (permalink)  
Antiguo 14/06/2010, 13:36
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sockets en Python

pasos que he hecho hasta ahora:

He Abierto los puertos de mi router y he puesto en el router, que en el mio esta en la zona de virtual servers:
He abierto el puerto, xxxx tanto de entrada como de salida para la ipe interna yyyy, con protocolo UCP(que es con el que me comunico)

Una vez hecho esto, en el server pongo la ip yyyy con el puerto xxxx, y en el cliente la ip publica con el puerto xxxx

donde xxxx, yyyy sin siempre iguales, asid eberia funcionar no?

Pues el cliente me dice Connection refused!!! xdxd

Saludos
  #12 (permalink)  
Antiguo 14/06/2010, 14:07
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: sockets en Python

Si el servidor es una maquina virtual también deberías de configurar la maquina virtual para que pertenezca a la red.

Para saber si tu puerto esta abierto deberías de hacer un port scan.

Aquí una pagina
  #13 (permalink)  
Antiguo 14/06/2010, 14:41
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sockets en Python

MMMM, vale me ha servido lo de añadir la maquina virtual creo que lo he hecho... xdxd, ahora la pagina que me has pasado me detecta que el puerto esta respondiendo cuando pruevo esto con el programa, cliente servidor, no me da un "connectionr refused", si no un "conection time out" vaya del error 111 al 110 uueee xdxd venga vamos que podemos.

No se a que puede ser debido...


Pero muchas gracias si se os ocurre algo ya sabeis si yo voy probando y lo soluciona ya comentare que he hecho!!!

Saludos


EDITO: Lo estoy volviendo a provar y sin tocar nada ya la pagina no me detecta el puerto, y el cliente me da el error de No rute to host erno:113
  #14 (permalink)  
Antiguo 15/06/2010, 09:22
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: sockets en Python

Por cierto la IP publica cambia cada cierto tiempo. Dependiendo de tu provedor de Internet
  #15 (permalink)  
Antiguo 15/06/2010, 10:02
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sockets en Python

tengo ip estatica xdxd, y si no que deberia hacer? subir-lo a un servidor en internet? si es asi eso como lo haria.


Mercy, Saludos!!
  #16 (permalink)  
Antiguo 16/06/2010, 14:14
 
Fecha de Ingreso: junio-2010
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sockets en Python

Perdonad por el doble post, pero creo que engo avances, el problema esta en mi programa cliente, ya que, con las configuraciones que tengo hechas hasta ahora, cuando utilizo la pagina que me diste para saber si el puerto esta abierto o no, y teniendo el programa server.py activo, me detecta la pagina me detecta el puerto, y el server me detecta que le han entrado, si os fijais en mi programa cliente cuando el primer cliente se conecta, imprime por pantalla que ha recivido una conexion.

Saviendo esto no se si cambia las cosas, deduzco que a mi programa cliente le falta algo.

Saludos!!

Etiquetas: sockets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:52.