Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Temas relacionados > Redes
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 29-07-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
gluglu Va por buen camino
Recibir múltiples respuestas en TIdUDPClient después de un BroadCast

Hola amig@s !

Me gustaría poder clarificar una duda que tengo.

Lanzo un BroadCast desde un TIdUDPClient para que las diferentes instancias de mi programa que se estén ejecutando en los diferentes puestos de una red local, me devuelvan un valor (en este caso el del código del puesto de trabajo que ejecutan).

Cómo debería de gestionar correctamente las diferentes respuestas que recibo para tener 'controladas' todas las respuestas que me van a enviar los diferentes TIdUDPServer's ??

Estoy haciendo pruebas, y me he creado un Memo donde voy mostrando las diferentes respuestas que obtengo.

El código actual del UDPClient es :
Código Delphi [-]
UdpClient.Broadcast('UDP_REQUEST_POSITIONS', 50000);
Aux_S1 := UDPClient.ReceiveString();
if Aux_S1 = '' then
  UDPMemo.Lines.Add('No se recibió respuesta transcurridos ' + IntToStr(UDPClient.ReceiveTimeout) + ' milisegundos.')
else begin
  UDPMemo.Lines.Add('Cadena Recibida: ' + Aux_S1);
  if Copy(Aux_S1, 1, 19) = 'UDP_REPLY_POSITIONS' then
    UDPMemo.Lines.Add('Puesto que ha respondido : ' + Copy(Aux_S1, 21, 6));
end;

De hecho, me funciona correctamente con las posibilidades para probar que tengo aquí mismo, que son dos ordenadores.

En el UDPMemo me aparecen correctamente que me responden (p.ej.) el puesto 1 y el puesto 2.

Pero quiero tener la seguridad que lo estoy haciendo correctamente. Necesito algún bucle adicional que me comprueba algún buffer de lectura en el UDPClient ?? Necesito de alguna comprobación adicional ?? Realmente cómo funciona el UDPClient.ReceiveString() para que pueda gestionar todas las respuestas de manera correcta ?? Si la prueba en vez de realizarla con 2 puestos, la realizara con 100 (... o más) puestos, el código sería el mismo o, refiriéndome a la misma pregunta, debería hacer algún bucle especial que me leyera el buffer de lectura ??

El código que tengo en el evento OnRead del UDPServer es :
Código Delphi [-]
procedure TMainform.UDPServerUDPRead(AThread: TIdUDPListenerThread;
  AData: TIdBytes; ABinding: TIdSocketHandle);
var
  LMsg   : String;
  Aux_S1 : String;
begin
  LMsg := BytesToString(AData, 0, Length(AData));
  UDPMemo.Lines.Add(LMsg);
  if LMsg = 'UDP_REQUEST_POSITIONS' then
    Aux_S1 := 'UDP_REPLY_POSITIONS_' + IntToStr(Gen_Position)
  else
    Aux_S1 := 'Replied from ' + UDPServer.Name;
  ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, Aux_S1, ID_DEFAULT_IP_VERSION);
end;

La versión de Indy que utilizo es la 10.5.8.0.

Gracias por vuestros comentarios
__________________
Piensa siempre en positivo !
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como generar ventas multiples (seleccionar multiples items) userdelphi Varios 4 30-12-2010 02:52:21
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


La franja horaria es GMT +2. Ahora son las 13:06:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi