![]() |
Sockets: Enviar un mensaje a todos los clientes conectados!!!
Hola de nuevo. Tengo un problema:
Estoy haciendo un programa que funcione como un chat para una red. Funciona de modo que un cliente envía la información y el servidor se la devuelve a todo el mundo (o así es como debería funcionar:confused: ), pero no, el servidor solo me devuelve la información al cliente que se la mandó. El código en el que creo que debe de estar el error es el siguiente: procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var TextoRecibido : String; begin TextoRecibido := Socket.ReceiveText; Socket.SendText(TextoRecibido); txtRecibido.Lines.Add (TextoRecibido); end; Aclaración: txtRecibido es un Memo. Gracias a todos de nuevo, espero su ayuda |
Claro, porque tu se lo estas enviando a una IP en concreto.El socket que envia, tiene que apuntar a todas las IPS.
Primero a una y envia, luego a otra y envia y asi. Bueno realmente lo correcto, seria, utulizar la misma conexion que el cliente te abrio hacia el servidor. Ejemplo: SERVIDOR PC1 PC2 PC3 Paso 1 PC1 abre conexion hacia el servidor. PC2 abre conexion hacia el servidor. PC3 abre conexion hacia el servidor. (es decir se conenectan a la IP del SERVIDOR) Paso2 PC1 envia mensaje al SERVIDOR. Paso3 SERVIDOR, envia a traves de la conexion anteriormente abierta por cada uno de los PCS(excepto PC1,claro) hacia el,el mensaje enviado Por PC1 Espero te haya quedado claro. Un saludo |
Descendents, esos son los pasos que estaba intentando segir, excepto por lo de enviarselos a todo excepto PC1, es decir, el pc1 enviaría la información y la recibiría del SERVIDOR, así sé si ha llegado al servidor la información.
Mi problema está en la parte de consegir que envíe la información a todos, no solo al que se la ha enviado. De todos modos, muchas gracias, eres el único que ha mostrado interés por mi hilo, de momento. Gracias |
Dark byte.
El problema que me dices, es lo que te dije antes. La solución esta en que tienes que utilizar la conexión que cada pc le abrio al servidor, para enviarle lo que te de la gana desde el servidor a cualquier pc. Es decir, el servidor no tiene que abrir ninguna conexión.Tan solo tiene que utilizar las conexiones abiertas por cada pc hacia él, para devolverles una respuesta o lo que quieras. Espero que me entiendas Suerte |
Has visto el código del chat que viene en las demos de las Indy. Creo que te aclarará mucho y te dará ideas para hacer lo que queres.
Hasta luego. ;) |
Seria mas facil que vieras el ejemplo de Chat de las Indy.
Es un chat funcional. Puedes darle una miradita y checar que es lo que no estas haciendo para que te funcione con los sockets o en fin usar este ejemplo para crear el tuyo. Saludos! |
Oh! :eek:
Por dos minutos! jejeje |
Me dicen el más rápido del oeste... jejejeje. :D :D :cool:
|
Si no estas usando Indy, sino los componentes genericos de manejo de sockets de delphi, tienes que hacer un recorrido por todos los clientes conectados al servidor, y repartirle los mensajes a cada uno.
Sucede que cada vez que conectas, el serversocket mantiene una coleccion de las distintas conexiones que tiene establecidas a el, asi que en vez de escribir el codigo: Código:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Código:
|
Gracias!!, probaré esto último y ahora os cuento. Y por cierto..., no uso las Indy.
"Muxas ashias";) |
No me funciona!!, me da error nada mas recibir el serversocket el texto!! :'(.
Estoy trabajando en un ordenador sin internet... no se si eso influirá algo.. |
Cual es el error que da?
Fe de errata, en vez de ser ActiveConnections es ActiveConnections - 1 |
Ah, vale, lo probaré, de todos modos, si me pudiese comentar el codigo... mejor, así aprendería mas, que es lo que me interesa fundamentalmete, gracias
|
Me sigue dando fallos...,:( me dice:
Cita:
Gracias por adelantado... y si alguien me pudiese, además de responderme, explicarme cómo funciona el código..., se lo agradecería de verdad. |
Comentas que es para una RED. Pero...
¿Tu aplicacion servidor/cliente necesita el internet para poder conectarse? |
Puedes, dentro del for, verificar si el cliente esta conectado al servidor.
Aunque esta supuesto a encontrar cada conexion en el arreglo, tomando en cuenta la propiedad ActiveConnections, no se si cuando uno de los clientes se desconecta el reorganiza el indice de clientes conectados. |
Madman, no se. Lo digo porque en la red se que se pueden abrir puertos y enviar información..., sin embargo no se si en un pc sin internet y sin conexión a red funciona mi programa igual que en el de la red.
Las pruebas las hago en el ordenador sin red e internet, ya que el modem usb de telefónica no me funciona en este. |
Cualquier programa de red debe funcionar, incluso si tu máquina no esta en ninguna red, siempre y cuando se hayan instalado al menos un controlador de red y los protocolos que querras utilizar.
Eso si, si tu programa se conectará a un servidor que no está accesible, pues no funcionará. Internet, desde el punto de vista de redes, simplemente es una serie de nodos mas. Hasta luego. ;) |
Si tienes tu aplicacion en una computadora sin red, creo que puedes conectarte a tu misma computadora. :D
Yo asi hice una aplicacion pequeña (server and workstation) que desde el cliente manda al servidor todo lo que se escribe al servidor (ya se los sermones de etica y privacidad :rolleyes: ) pero para poder saber si funcionaba nada mas utilizaba la IP de mi makina en si misma. Si tienes un adaptador de red yo creo que colocandole una IP X puede funcionar, asi como te digo. Tal vez... :p |
Prueba en la línea de comandos :
ping localhost Si te indica que hay respuesta, entonces el equipo tiene bien configurado el protocolo TCP/IP. En caso negativo, tienes que instalar en la maquina un adaptador de red (puedes simularlo instalando el adaptador Microsoft loopback adapter, en Windows XP veo que se llama Adaptador de bucle invertido de Microsoft). Una vez instalado el adaptador (tarjeta de red), tienes que instalar y configurar el protocolo TCP/IP. Respecto a programar la aplicación, aunque nunca he programado nada de este tipo, es muy probable que tengas que ejecutar a la vez el cliente y el servidor, puesto que sino, si pruebas el cliente no podrá conectarse a ninguna parte. NOTA: Ejecuta la parte servidor en la misma maquina, y en la parte cliente especifica localhost como dirección a la que te quieres conectar. Saludos. |
La franja horaria es GMT +2. Ahora son las 09:36:12. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi