![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Estas haciendo muchas suposiciones, sobre el tiempo que tardan en llegar los paquetes. No se si has probado el programa dentro de una red de verdad, poniendo el servidor y el cliente en equipos diferentes, si lo haces veras que los paquetes puedes sufrir retardos imprevisibles, así que hacer suposiciones sobre los milisegundos te llevara a errores.
Por otro lado supongo que estas usando sockets que no se bloquean, asíncronos. Estos son muy cómodos, pues solo tienes que esperar a que la información vaya llegando y el evento OnRead se dispara todas las veces que eso ocurra. El problema es que tu quieres leer todos los datos de una vez, y precisamente los sockets asíncronos se utilizan para ir leyendo la información según va llegando, en diferentes eventos. Así que lo que deberías hacer es usar, por ejemplo, variables globales. Dicho esto, yo te recomiendo los socket que se bloquean usados junto con threads. El concepto es mucho mas sencillo, cada conexion es un hilo de ejecucion diferente, y los datos se leen y escriben de forma sincrona. Para mi es mucho mas facil de entender el modelo sincrono que el asincrono, pero a la gente parece que le gusta mas lo asincrono Ya se que lo anterior es un rollo, así que mi consejo es que si quieres hacer algo mas complejo que mandar mensajitos de texto, te olvides del TClientSocket y TServerSocket y utilices los componentes Indy, y mejor si utilizas un componente con un protocolo como ftp, http. Y si lo sigues queriendo hacer por el camino difícil, entonces dejate de tonterías y vamos directamente a la api, donde crearemos los socket "a mano" y leeremos, escribiremos y comprobaremos su estado usando funciones de la api. Esto que en principio resulta muy trabajoso, luego nos da mucho mas control sobre la comunicación. Espero que te sirva, y perdona por el rollo ... ![]() |
|
#2
|
|||
|
|||
|
Gracias por la respuesta seoane, te comento:
Cita:
Cita:
Dado que mi intencion si que es hacer algo mas que mandar mensajitos voy a ponerme a investigar con los Indy a ver que pasa, y de paso ver si encuentro un ejemplo de sockets asincronos y threads y a ver que veo mas asequible. Ya dare el coñazo por aqui con las dudas que me surjan... Gracias por el "rollo" ![]() Un saludo. JMGR |
|
#3
|
|||
|
|||
|
Solucion
usa application.processmessage o simula el while con un timer.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Desactivar un form mientras se ejecuta otra aplicación | hvelascos | Internet | 2 | 19-01-2007 01:50:41 |
| Actualizar datos de una base de datos en un reporte | Marymania | Impresión | 4 | 27-11-2006 19:47:32 |
| Actualizar datos en un Qreport | royrogers84 | Varios | 6 | 21-11-2006 23:46:09 |
| Como leer los paquetes que se reciben por el puerto COM | rjsitruiz | Varios | 5 | 07-08-2004 00:07:10 |
| Actualizar Datos | trex2000 | Firebird e Interbase | 1 | 26-09-2003 23:21:49 |
|