FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Broadcast a traves de Threads
Vuelvo para plantearos otro problema. De momento no tiene aplicacion practica, pero estoy intentando aprender como funciona.
Tengo varios programas por la red que tienen activo un TSockectServer y estan escuchando por el puerto 7000. Ahora tengo que hacer un programa con varios TSocketClient que se conecte a todos los Servers. Tengo algo asi
Esto funciona, pero va lento porque tiene que esperar a que cs.Open de un error. La intencion seria lanzar 255 Threads y que vayan respondiendo. Esto sabria hacerlo, lo que no se como hacer es que cada Thread añada una linea a lsb. Y ya puestos para no obtener 255 mensajes de error, alguien sabe como silenciar cs.open? |
#2
|
||||
|
||||
Yo creo que lo ideal seria escanear la red buscando los ip que existían, en vez de intentar conectar a 255; estoy seguro que escafandra había comentado al respecto
Estas ocultando la excepción con un try except, no deberías verla en tiempo de ejecución: obvio que si ejecutas desde Delphi y con el depurador (f9) ahí si ves la excepción |
#3
|
|||
|
|||
Cita:
|
#4
|
||||
|
||||
Podemos escanear toda la red, o un rango de IPs, haciendo ping en varios hilos (de esto hay información en el foro), o bien, como mostré en este ejemplo, usar un servidor UDP en un hilo de nuestro programa servidor, que responda a un mensaje por ese protocolo a cada cliente que lo envíe. Los clientes envían un solo mensaje a la dirección broadcast de la red, de forma que todos los servidores lo recibirán. Dado que UDP no depende de conexión y que puede fallar, se puede repetir el mensaje un número determinado de veces. El mensaje de cada servidor, será recibido por el cliente que lo envía. Para ello, debe estar a la escucha en dicho protocolo UDP en un hilo a parte, que tomará nota de cada IP que responda. De esta forma, el cliente sabe los servidores que están en ese momento a la escucha. El sistema es parecido al que usan los dispositivos que quieren conectarse a un router para establecer la conexión después de esta verificación.
Para encontrar la dirección del broadcast de una red, se puede usar este método. Para hacer ping sin usar componentes de terceros, propongo este código. Saludos. Última edición por escafandra fecha: 16-12-2015 a las 15:23:36. |
#5
|
|||
|
|||
Os pongo este codigo, me funciona bien pero creo que tengo algun problema con la liberacion de los hilos, porque lo ejecuto una primera vez y ok, la segunda vez que le doy, a veces funciona, a veces se para por la mitad y le lanza el error que adjunto. Supongo que se queda corto de recursos porque no libero algo bien.
|
#6
|
||||
|
||||
A bote pronto, parece que puedes estar destruyendo list antes de que terminen los hilos. No debes usar una variable local como parámetro de un hilo, debe existir mientras dure la vida del cada hilo.
Saludos. |
#7
|
||||
|
||||
No estas protegiendo el acceso a un recurso compartido (TStringList)
Ese codigo crea el TStringList, pone cierta cantidad de hilos en marcha, y mientras los hilos estan trabajando, asignas a un ListBox el StringList y luego lo liberas. No podes afirmar que todos los hilos terminaron su trabajo Última edición por AgustinOrtu fecha: 16-12-2015 a las 18:06:05. |
#8
|
||||
|
||||
Podes probar de esta manera
MainForm;
Aunque la verdad la implementacion TClientSocket es una lagrima: no tiene para establecer TimeOut |
#9
|
||||
|
||||
Vaya, pesimo de mi parte
El metodo TThread.Execute deberia estar en la seccion protegida de la clase
Y nunca deberiamos llamar a Execute directamente, sino Start
|
#10
|
|||
|
|||
Gracias a todos y en especial a AgustinOrtu, me ha servido de mucha ayuda. Tema resuelto.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Recibir múltiples respuestas en TIdUDPClient después de un BroadCast | gluglu | Redes | 0 | 29-07-2011 10:31:42 |
Utilizar el Broadcast del UDP! | fide | Internet | 10 | 11-11-2007 05:40:38 |
Hacer un Broadcast | miguel_e | Varios | 0 | 09-01-2006 16:47:38 |
Como Calcular Los BroadCast | edwinsimon | Redes | 1 | 22-05-2005 07:50:32 |
Cliente-Servidor y Broadcast | marceloalegre | Varios | 1 | 03-05-2005 21:19:32 |
|