FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Comportamiento ClientSocket
Hola a tod@s.
Estoy integrando a mi programa de restauración un cajón portamonedas de AZCOYEN. La comunicación se hace mediante sockets enviando y recibiendo mensajes. En un programa de prueba que he preparado abro el ClientSocket con la IP y el PUERTO correspondientes y picando en un botón envío un "string" para inicializar el cajón y ponerlo disponible para recibir mensajes, todo esto sin mayor problema. Es decir, en el .create (o en el .show) pongo: ClientSocket.Active := True; y en el botón pongo: ClientSocket.Socket.SendText('#I#'); Todo esto funciona OK. El problema me viene cuando quiero que cuando se abra el programa haga estas dos operaciones de forma automática, es decir, que abra el ClientSocket e inmediatamente después me envíe el "string" para inicializar el cajón. Es decir, en el .create (o en el .show) pongo: ClientSocket.Active := True; ClientSocket.Socket.SendText('#I#'); y hace caso omiso de la segunda línea porque el "ClientSocket" sigue estando a False cuando se hace el .SendText. ¿Alguien me puede indicar cómo puedo resolver esto? Gracias y un saludo
__________________
Be water my friend. Última edición por Casimiro Notevi fecha: 08-05-2019 a las 18:33:09. |
#2
|
||||
|
||||
¿Puede ser que no haya tenido tiempo el "Active" y la línea que envía el comando no funciona porque está todavía "no activo"?
Por probar, pon un tiempo de espera entre ambas líneas. También supongo que tendrás un socket.close en algún sitio para que no se quede "abierto". |
#3
|
||||
|
||||
Cita:
Ya he probado poniendo tiempos de espera con Sleep(...) y nada. Efectivamente se hace un "close" pero cuando se cierra la aplicación. Gracias y un saludo
__________________
Be water my friend. |
#4
|
|||
|
|||
Hola a todos!!
puede ser que necesites hacer un Application.processMessages después de intentar conectar para que el componente detecte el cambio de estado, en cualquier caso ¿Que tipo de error te genera? Intenta probar con este código
|
#5
|
||||
|
||||
Bucanero.
Gracias por contestar. El tema es que lo que planteas básicamente es también esperar (más o menos tiempo) a que se active el ClientSocket y no se activa. He estado mirando por internet y he visto que hay dos formas de tratar este componente, una con el parámetro "ctBlocking" y otra con el parámetro "ctNonBlocking". La verdad es que no sé muy bien la diferencia que hay entre una forma y otra pero si parece que los eventos los disparan de distinta manera. Por defecto viene "ctNonblocking", si lo cambio a "ctBlocking" si me activa al tirón pero tiene la contrapartida de que no se activa el evento "OnRead" por lo que hay que consultar el resultado manualmente cuando se envía cualquier cosa. P.e.:
Yo creo que con esto me apaño. Gracias a todos.
__________________
Be water my friend. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
IdcmdTCPClient o ClientSocket | LIGERO | Internet | 0 | 26-12-2017 14:00:29 |
ClientSocket | Parsec | Internet | 3 | 07-07-2014 08:48:11 |
Problemas con Clientsocket | Shadowng | Internet | 5 | 23-06-2008 21:43:16 |
Serversocket y Clientsocket | Dragon | Varios | 3 | 03-05-2006 06:11:36 |
ClientSocket / serverSocket | VRO | Varios | 2 | 20-10-2005 18:46:51 |
|