Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Enviar un mensaje a todas las conexiones activas (https://www.clubdelphi.com/foros/showthread.php?t=10047)

•–[XII]–• 09-05-2004 14:44:48

Enviar un mensaje a todas las conexiones activas
 
Saludos, uso Delphi 7 y tengo un problema con las Indy... No se enviar desde el IdTCPServer un mensaje a todas las conexiones activas.

Muchas gracias

•–[XII]–• 09-05-2004 21:08:24

Por favor, necesito ayuda, nadie puede responderme?. He hecho una búsqueda en los foros como bien recomendáis, pero no he encontrado ningún hilo (no se me da bien buscar). He leído la guía de estilo y creo que no he puesto nada incorrecto. ¿Soy ignorado por ser la primera vez que posteo?

Combat-F2D 09-05-2004 21:22:07

Cita:

¿Soy ignorado por ser la primera vez que posteo?
personalmente te dire que no miro los post.
siempre hay una 1º vez
en todo hay un primero y un ultimo

puede ser que los que estamos no sepamos la solucion, o bien el que la sabe no esta

te paciencia, todo llegara, y por favor, lee la Guía de estilo de los foros

marcoszorrilla 09-05-2004 22:00:41

Cita:

¿Soy ignorado por ser la primera vez que posteo?
.

He de decirte que no, lo que ocurre es que los fines de semana entra mucho menos gente a los foros y esto puede ser el motivo de que aún no te hayan resuelto tu pregunta, ten en cuenta que no todos trabajan con las Indy.

Un Saludo y ten paciencia.

Emilio 09-05-2004 23:02:44

Yo diría que tu pregunta es ambigüa, ¿qué quieres decir al decir "mensaje"?, ¿qué quieres decir al decir a todas las conexiones activas?

Aclara un poquito más lo que quieres hacer y seguro que encuentras más respuestas.

orodriguezc 11-05-2004 02:16:18

Yo lo hice usando UDP
 
Cita:

No se enviar desde el IdTCPServer un mensaje a todas las conexiones activas.
Yo tuve un problema similar pero utilizando UDP. Mi meta era poder notificar a todas las máquinas que estuvieran "interesadas" en la ocurrencia de un suceso. Para lograrlo simplemente envie un mensaje a la dirección Broadcast de mi Red IP.

Voy a mostrar un ejemplo para explicarme mejor: Todas las maquina de mi red tienen asignada alguna dirección IP en el rango 192.160.13.1 - 192.160.13.254 con mask 255.255.255.0, pues bien, la dirección de broadcast de mi red es 192.160.13.255. Esto significa que siempre que se envien un mensaje a la dirección 192.160.13.255, este mensaje llegará a todas las máquina encendidas en la red.

Ahora, en mi caso yo utilice UDP, el cual es un protocolo que no es orientado a conexión, lo que me facilitó bastante la tarea. Usando TCP no creo que la cosa sea tan sencilla, pero el principio es el mismo: enviar un mensaje a la dirección de broadcast.

Espero te sirva de guia. Saludos.

jachguate 11-05-2004 03:03:12

Hola. En primer lugar, me parece que dar solo algunas horas (seis, para ser exacto) para obtener respuesta es alg ilógico, tomando en cuenta que este es un foro que existe gracias a los desinteresados aportes de muchos.

Además, que este tipo de actitud se observe un domingo, me parece ya una exageración.

En fin... supongo que te referis a las conexiones establecidas ya con el servidor. Te bastaría hacer un bucle que recorra los Threads del server para escribir los mensajes.

Hasta luego.

;)

•–[XII]–• 11-05-2004 20:11:44

Pido perdón por mi conducta, pero un compañero que viaja por estos foros me recomendó que entrase, que me responderían rápido, y al ver que esperaba y no encontraba respuesta de ninguno de Ud., postee otro mensaje. Sinceramente, les pido disculpas.

Lo que trato es de enviar un string a todas las conexiones activas. Voy a explicar el funcionamiento de mi aplicación:

-El cliente envía un mensaje al servidor
-El servidor comprueba que no sea un comando
-El servidor reenvía el mensaje a todos los clientes conectados al servidor.

¿Alguien sabría como puedo hacer lo tercero?. Muchas gracias.

roman 11-05-2004 20:21:11

Cita:

Empezado por •–[XII]–•
¿Alguien sabría como puedo hacer lo tercero?. Muchas gracias.

Pues esto ya te lo contestó el compañero jachguate:

Cita:

Empezado por jachguate
bastaría hacer un bucle que recorra los Threads del server para escribir los mensajes

Si buscas en las demos de Indy (puedes bajarlas de http://www.nevrona.com/Indy/ junto con la útima versión) encontrarás varias que te pueden ejemplificar; por ejemplo la del Chat, que tiene la función BroadcastMessage que manda un menaje a todos los clientes.

// Saludos

•–[XII]–• 12-05-2004 08:07:06

Código Delphi [-]
//Esto supongo que listará los clientes conectados
 List := tcpServer.Threads.LockList;
 try
    for Count := 0 to List.Count -1 do
      try
           //Supongo que en esta parte es el la que se envía el mensaje a todas las conexiones.
          TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
      except
           TIdPeerThread(List.Items[Count]).Stop;
       end;
       finally
           tcpServer.Threads.UnlockList;
       end;
Es verdad, había revisado el ejemplo, pero no encontraba la sección para distribuirlo. Una duda más... ¿para que sirve el Trim?, porque con la ayuda de Delphi no me aclaro (No se si debería poner esto en un nuevo hilo..., pero como es una pregunta sencilla...).


Muchas gracias

marcoszorrilla 12-05-2004 14:57:00

Realmente debieras de abrir otro hilo, puesto que la pregunta no tiene nada que ver con Internet, pero ya para cerrar este, te respondo.

Si escribes trim te colocas sobre dicha palabara y pulsas control + F1:

string handling routines

function Trim(const S: string): string;

Description

Trim removes leading and trailing spaces and control characters from the given string S

Un Saludo.

•–[XII]–• 12-05-2004 18:18:57

Cita:

Empezado por marcoszorrilla
te colocas sobre dicha palabara y pulsas control + F1:

Eso ya lo hice antes de postear, lo que no se es el significado de la frase última. de:

Cita:

Trim removes leading and trailing spaces and control characters from the given string
Trim elimina ¿? y ¿? espacios y controla los carácteres de la cadena dada.

roman 12-05-2004 18:30:58

Cita:

Empezado por •–[XII]–•
Trim elimina ¿? y ¿? espacios y controla los carácteres de la cadena dada.

Trim elimina espacios al comienzo y al final y carácteres de control de la cadena dada.

Hay que reforzar el inglés ¿eh? :p

// Saludos

•–[XII]–• 15-05-2004 12:53:51

Cita:

Empezado por roman
Hay que reforzar el inglés ¿eh?

Cuanta razón lleva!!, por cierto, en la línea:
Código Delphi [-]
  //Esto supongo que listará los clientes conectados
  List := tcpServer.Threads.LockList;

Me da error en Threads en mi aplicación, ¿porqué?

jachguate 15-05-2004 13:13:22

Cita:

Empezado por •–[XII]–•
Me da error en Threads en mi aplicación,

Que significa exactamente esto??

Eleva una excepción?? que excepción???

te recomiendo la lectura de este hilo que habla sobre la calidad de las preguntas.

Hasta luego.

;)

•–[XII]–• 15-05-2004 15:04:40

No amplié la información puesto que no la tenía a mano.
Cita:

[ERROR] uPrincipal.pas(84): Undeclared identifier: 'Threads'
[ERROR] uPrincipal.pas(93): Undeclared identifier: 'Threads'
He copiado y pecado el BoadcastMessage y he quitado alguas cosas sobrantes.

jachguate 15-05-2004 18:24:41

Pero... que versión de las indy estas usando pues???

•–[XII]–• 15-05-2004 19:17:47

La v.9, la misma de la que descargé los ejemplos

•–[XII]–• 15-05-2004 19:26:39

Más fácil: La que me venía con Delphi 7 Enterprise

jachguate 15-05-2004 20:45:50

Pues yo recien compile el Demo del server de chat sin problemas...

revisá que incluyas en tu clausula uses la unidad IdTCPServer; aunque si has agregado en tiempo de diseño el componente, delphi debiera incluirla automáticamente.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 22:07:09.

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