Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Problema Con Sockets

Problema Con Sockets
Artículo
Responder citando    Descargar mensaje  
Mensaje Problema Con Sockets 
 
Hola
No veo que me está pasando. No consigo establecer una conexión y no veo la razón.

Salida de netstat que demuestra que el puerto 10000 está a la escucha
Citar:
netstat -tpan | grep 10000
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN      3674/gbx2      


Y quiero abrir un socket a ese puerto
Public function Conectar() as socket
Dim S as new socket
S.Connect("localhost", "10000")
 DO WHILE (S.Status <> 7) AND (S.Status > 0)
    WAIT 0.1
  LOOP
 IF S.Status <> 7 THEN
    Message.Error("no conecta")
 ELSE
  WRITE #S, mensaje.text, 5
 ENDIF
...
end
 

Al intentar conectar status coge valor 5 -> Net.Searching (osea que está resolviendo el nombre)
Luego status coge valor 0 --> Net inactive (osea que ha colgado) y acaba en el message "no conecta"
Por si acaso era un problema de resolución de nombre he probado con la ip y tampoco.

No caigo
 



 
soplo - Ver perfil del usuario Enviar mensaje privado  
soplo [ Sabado, 03 Octobre 2009, 22:59 ]
 


Problema Con Sockets
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Problema Con Sockets 
 
Hola

Yo recomiendo usar la otra forma basada en eventos.

Para crear un socket tienes que hacer:

PRIVATE mySocket AS Socket

PUBLIC SUB Form_Open()
    mySocket = NEW Socket AS "MySocket1" 'instanciamos un nuevo socket con el manejador "MySocket1"
    mySocket.Host = "localhost"
    mySocket.Port = 10000
    IF mySocket.Status <> Net.Connected() THEN  'si no estamos ya conectados, nos conectamos
        mySocket.Connect()
    END IF
END

PUBLIC SUB MySocket1_Ready()
    WRITE #mySocket,"Prueba\n", 7   'una vez que el socket está listo, podemos escribir en él

END

PUBLIC SUB MySocket1_Read()   'este evento se dispara siempre que haya datos en el buffer interno
   DIM Cad AS String           'pendientes de leer.
   READ #mySocket, Cad, Lof(mySocket)
   PRINT Cad
   CLOSE #mySocket    'puedes cerrarlo aquí, o en otro momento. Por ejemplo en el evento Form_Close()

END

PUBLIC SUB MySocket1_Error()            'este evento se dispara cuando hay un  error. Puedes
                                         'mostrar un mensaje.
    DEBUG "Se ha producido un error"

END


Esta es la forma preferida de manejar sockets. Además recomiendo usar versiones recientes de gambas, ya que en las más antiguas este componente tenía un problema que hacía que consumiera muchos recursos de la máquina.

El código aquí expuesto es el que vengo usando en mis aplicaciones, pero lo he escrito de memoria y puede que haya algún fallo...

Saludos



 
jguardon - Ver perfil del usuario Enviar mensaje privado  
jguardon [ Lunes, 05 Octobre 2009, 11:00 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron