Foros del Web » Programando para Internet » Python »

Sockets: Problemas IF

Estas en el tema de Sockets: Problemas IF en el foro de Python en Foros del Web. Buenas, resulta que tengo este codigo para el servidor!!: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original if __name__ == '__main__' :     #Creacio socket UDP ...
  #1 (permalink)  
Antiguo 30/03/2013, 12:44
 
Fecha de Ingreso: marzo-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Sockets: Problemas IF

Buenas, resulta que tengo este codigo para el servidor!!:

Código Python:
Ver original
  1. if __name__ == '__main__':
  2.     #Creacio socket UDP
  3.     UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  4.     print "Socket creat!!"
  5.  
  6.     #Fem el bind i el posem a escoltar
  7.     UDPSock.bind(("",22222))
  8.  
  9.     # Bucle per atendre els clients
  10.     seguir = True
  11.     while seguir:
  12.         # Rebem dades
  13.         mensaje, direccion = UDPSock.recvfrom(1024)
  14.         print >>sys.stderr, "Conexion de: ",direccion
  15.  
  16.         print mensaje
  17.        
  18.        
  19.         # Contestacio a REGISTER
  20.         if mensaje == "REGISTER":
  21.             UDPSock.sendto(ok_reg,direccion)
  22.             print "caca"

No consigo que entre en el IF i eso que al hacer el "print mensaje" me imprime correctamente el mensaje recibido es decir REGISTER.
alguna idea

gracias!

Última edición por razpeitia; 30/03/2013 a las 13:22
  #2 (permalink)  
Antiguo 30/03/2013, 13:40
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: Problemas IF

Bueno primero que nada necesitas hacer varias cosas.

1.- Importar el modulo socket y el modulo sys.
2.- Guardar tu script y correrlo en alguna terminal. (Ojo no lo importes desde otro script con la finalidad de correrlo)
3.- Una vez que imprima el mensaje "Socket creat!!" en otra terminal corre tu script de cliente.


Código Python:
Ver original
  1. # servidor.py
  2. import socket
  3. import sys
  4.  
  5. if __name__ == '__main__':
  6.     #Creacio socket UDP
  7.     UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  8.     print "Socket creat!!"
  9.  
  10.     #Fem el bind i el posem a escoltar
  11.     UDPSock.bind(("",22222))
  12.  
  13.     # Bucle per atendre els clients
  14.     seguir = True
  15.     while seguir:
  16.         # Rebem dades
  17.         mensaje, direccion = UDPSock.recvfrom(1024)
  18.         print >>sys.stderr, "Conexion de: ", direccion
  19.  
  20.         print mensaje
  21.        
  22.        
  23.         # Contestacio a REGISTER
  24.         if mensaje == "REGISTER":
  25.             print "REGISTER recieved"
  26.             UDPSock.sendto("Message Recieved", direccion)

Código Python:
Ver original
  1. # cliente.py
  2. from socket import *
  3. import select
  4.  
  5. address = ('localhost', 22222)
  6. client_socket = socket(AF_INET, SOCK_DGRAM)
  7.  
  8. data = "REGISTER"
  9. client_socket.sendto(data, address)
  10.  
  11. recv_data, addr = client_socket.recvfrom(2048)
  12.  
  13. print recv_data
  14.  
  15. client_socket.close()

Si quieres hacer algo profesional entonces te recomiendo trabajar con Twisted.
  #3 (permalink)  
Antiguo 31/03/2013, 09:52
 
Fecha de Ingreso: marzo-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Sockets: Problemas IF

Primero de todo gracias por contestar, la verdad que ya tenia echo los imports lo unico que el cliente lo tengo en C.

el cliente se me conecta bien, pues me imprime sus datos correctamente (IP I PUERTO). Pero sigo sin conseguir que entre en el IF.

Código Python:
Ver original
  1. #!/usr/bin/python
  2. import socket
  3. import os, traceback, sys
  4.  
  5. ok_reg = "OK_REG"
  6. register = "REGISTER"
  7.  
  8.  
  9. if __name__ == '__main__':
  10.     #Creacio socket UDP
  11.     UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  12.     print "Socket creat!!"
  13.  
  14.     #Fem el bind i el posem a escoltar
  15.     UDPSock.bind(("",22222))
  16.  
  17.  
  18.     # Bucle per atendre els clients
  19.     seguir = True
  20.     while seguir:
  21.         # Rebem dades
  22.         mensaje, direccion = UDPSock.recvfrom(1024)
  23.         print >>sys.stderr, "Conexion de: ",direccion
  24.  
  25.  
  26.         print mensaje //AKI LO IMRPIME BIEN
  27.        
  28.         if mensaje.strip() == "REGISTER":
  29.             print "REGISTER recibido"
  30.        
  31.        
  32.         # Contestacio a REGISTER
  33.         if mensaje == register:
  34.             UDPSock.sendto(ok_reg,direccion)
  35.             print "register recibido 2"

lo he intentado poner en una variable i tampoco, ni utilizando el strip() que quita los espacios, ya no se que más probar.

Última edición por razpeitia; 31/03/2013 a las 10:42
  #4 (permalink)  
Antiguo 31/03/2013, 10:46
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: Problemas IF

En vez de
Código Python:
Ver original
  1. print mensaje

Puedes hacer
Código Python:
Ver original
  1. print repr(mensaje)

Y ver cuales son los datos que realmente esta recibiendo.
  #5 (permalink)  
Antiguo 31/03/2013, 10:53
 
Fecha de Ingreso: marzo-2013
Mensajes: 19
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Sockets: Problemas IF

correcto, me imrpime esto:

'REGISTER\x00'

pero no se que significa o si hay alguna "funcion" que lo solucione. alguna idea

Gracias
  #6 (permalink)  
Antiguo 31/03/2013, 13:53
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: Problemas IF

Es por que strip no remueve \0x00 por default tienes que hacer un
Código Python:
Ver original
  1. mensaje.strip().strip('\0x00')

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:45.