Foros del Web » Programando para Internet » Python »

PHP envia socket a Python pero no recibe respueta

Estas en el tema de PHP envia socket a Python pero no recibe respueta en el foro de Python en Foros del Web. Estoy tratando de hacer una pagina web que se envíe mensajes a un script echo en python. Cuando envío un mensaje desde la pagina (php) ...
  #1 (permalink)  
Antiguo 31/10/2012, 16:50
 
Fecha de Ingreso: julio-2012
Ubicación: San Mateo Ixtatán, Huehuetenango, Guatemala
Mensajes: 12
Antigüedad: 11 años, 9 meses
Puntos: 0
PHP envia socket a Python pero no recibe respueta

Estoy tratando de hacer una pagina web que se envíe mensajes a un script echo en python.

Cuando envío un mensaje desde la pagina (php) lo recibe el programa de python, pero cuando envío una respuesta (desde python) me da este error>

Código Python:
Ver original
  1. s.send(respuesta)
  2. error: [Errno 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied

estos son los codigos que estoy usando:
mensaje.php
Código PHP:
Ver original
  1. <?php
  2. if(isset($_POST['mensaje'])){
  3. $host = "localhost";
  4. $port = 9999;
  5. $output=$_POST['mensaje'];
  6. $socket1 = $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n");
  7. socket_connect ($socket1 , $host,$port ) ;
  8. #Envia el mensaje (Esto si funciona)
  9. socket_write($socket1, $output, strlen ($output)) or die("Could not write output\n");
  10. $tamaño=3072;
  11. $salida=socket_read($socket1,$tamaño);
  12. echo $output;
  13. echo 'R:>>';
  14. echo $salida.'\n';
  15. socket_close($socket1) ;
  16. }
  17.  
  18. ?>
  19. <form action="" method="post">
  20. <input name="mensaje" type="text" value="">
  21. <input name="" type="submit"></form>

mensaje.py
Código Python:
Ver original
  1. #!/usr/bin/python
  2.  
  3. import socket
  4. import subprocess
  5.  
  6.  
  7. #s = socket.socket()
  8. s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  9. s.bind(("localhost", 9999))
  10. s.listen(30)
  11. sc, addr = s.accept()
  12. res = socket.socket()
  13. while True:
  14.     try:
  15.         recibido = sc.recv(255)
  16.     except:
  17.         recibido = None
  18.     if recibido != None:
  19.         print recibido
  20.         if recibido == "fin":
  21.             s.send('Conexio Cerrada')
  22.             break
  23.         else:
  24.             respuesta = raw_input('R: >>')
  25.         s.send(respuesta)
  26.         print resultado
  27.         print ('_')*30
  28.     else:
  29.         s = socket.socket()
  30.         s.bind(("localhost", 9999))
  31.         s.listen(30)
  32.         sc, addr = s.accept()
  33.  
  34. sc.close()
  35. s.close()

Gracias de Antemano Muchá
  #2 (permalink)  
Antiguo 01/11/2012, 11:12
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: PHP envia socket a Python pero no recibe respueta

Te recomiendo usar Twisted es mucho mas seguro que usar sockets a secas.

Código Python:
Ver original
  1. #!/usr/bin/python
  2.  
  3. from twisted.internet import protocol, reactor
  4.  
  5. class Echo(protocol.Protocol):
  6.     def dataReceived(self, data):
  7.         self.transport.write('YOU RESPONSE HERE!')
  8.  
  9. class EchoFactory(protocol.Factory):
  10.     def buildProtocol(self, addr):
  11.         return Echo()
  12.  
  13. reactor.listenTCP(9999, EchoFactory())
  14. reactor.run()

Código PHP:
Ver original
  1. <?php
  2. $host = "localhost";
  3. $port = 9999;
  4. $output= 'Hola mundo!';
  5. $socket1 = $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n");
  6. socket_connect ($socket1 , $host,$port ) ;
  7. #Envia el mensaje (Esto si funciona)
  8. socket_write($socket1, $output, strlen ($output)) or die("Could not write output\n");
  9. $tamano=3072;
  10. $salida=socket_read($socket1,$tamano);
  11. echo $output."\n";
  12. echo 'R:>> ';
  13. echo $salida."\n";
  14. socket_close($socket1) ;
  15. ?>
  #3 (permalink)  
Antiguo 01/02/2013, 00:44
 
Fecha de Ingreso: julio-2012
Ubicación: San Mateo Ixtatán, Huehuetenango, Guatemala
Mensajes: 12
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: PHP envia socket a Python pero no recibe respueta

Gracias por lo del Wtisted.
al probarlo en localhost me funciona a la perfeccion, pero al subirlo y usarlo en un servidor no logra conectarse a mi pc con el codigo python.

Es algo relacionado con los puertos ?

Gracias de antemano por cualquier ayuda
  #4 (permalink)  
Antiguo 01/02/2013, 08:08
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP envia socket a Python pero no recibe respueta

Si estás detrás de un router, no olvides configurar el port forwarding
  #5 (permalink)  
Antiguo 01/02/2013, 21:49
 
Fecha de Ingreso: julio-2012
Ubicación: San Mateo Ixtatán, Huehuetenango, Guatemala
Mensajes: 12
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: PHP envia socket a Python pero no recibe respueta

Nel, estoy usando un modem de TURBONETT
allí no se puede configurar nada
  #6 (permalink)  
Antiguo 02/02/2013, 12:26
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP envia socket a Python pero no recibe respueta

Entonces olvídalo, si estás en una red local detrás de un router, la IP pública es la del router. Si no lo configuras para que las peticiones se redirijan a tu pc, no hay forma de que el experimento funcione.
  #7 (permalink)  
Antiguo 02/02/2013, 12:39
 
Fecha de Ingreso: julio-2012
Ubicación: San Mateo Ixtatán, Huehuetenango, Guatemala
Mensajes: 12
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: PHP envia socket a Python pero no recibe respueta

vale voy a usar otro metodo

Etiquetas: php, socket
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:48.