Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-11-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
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 ), 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
__________________
:)

Última edición por DarkByte fecha: 09-11-2003 a las 12:50:04.
Responder Con Cita
  #2  
Antiguo 09-11-2003
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 21
Descendents Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 09-11-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
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
__________________
:)
Responder Con Cita
  #4  
Antiguo 10-11-2003
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 21
Descendents Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 10-11-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 10-11-2003
Avatar de madman
madman madman is offline
Miembro
 
Registrado: may 2003
Ubicación: Nayarit, México
Posts: 242
Poder: 22
madman Va por buen camino
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!
__________________
Guía de Estilo.
Responder Con Cita
  #7  
Antiguo 10-11-2003
Avatar de madman
madman madman is offline
Miembro
 
Registrado: may 2003
Ubicación: Nayarit, México
Posts: 242
Poder: 22
madman Va por buen camino
Oh!

Por dos minutos! jejeje
__________________
Guía de Estilo.
Responder Con Cita
  #8  
Antiguo 10-11-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Me dicen el más rápido del oeste... jejejeje.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 10-11-2003
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
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;
Socket: TCustomWinSocket);
var
TextoRecibido : String;
begin
TextoRecibido := Socket.ReceiveText;
Socket.SendText(TextoRecibido);
txtRecibido.Lines.Add (TextoRecibido);
end;
escribirias:

Código:
 
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
TextoRecibido : String;
m : integer;
begin
TextoRecibido := ServerSocket.ReceiveText;
 for m := 0 to ServerSocket.Socket.ActiveConnections do
      ServerSocket.Socket.Connections[m].SendText(TextoRecibido);

txtRecibido.Lines.Add (TextoRecibido);
end;
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #10  
Antiguo 11-11-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Gracias!!, probaré esto último y ahora os cuento. Y por cierto..., no uso las Indy.

"Muxas ashias"
__________________
:)
Responder Con Cita
  #11  
Antiguo 14-11-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
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..
__________________
:)
Responder Con Cita
  #12  
Antiguo 14-11-2003
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Cual es el error que da?

Fe de errata, en vez de ser ActiveConnections es ActiveConnections - 1
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #13  
Antiguo 14-11-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
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
__________________
:)
Responder Con Cita
  #14  
Antiguo 18-11-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Unhappy

Me sigue dando fallos..., me dice:
Cita:
Project Messenger.exe raised exception class ESocketError with message "Windows socket error: No se ha permitido una peticíón para enviar o recibir datos ya que el socket no está conectado y no se ha proporcionado ninguna direción, al realizar el envío en un socket datagramas por medio de una llamada sendto (10057), on API 'recv". Procces stopped, Use Step or Run to continue...
¿Tendrá algo que ver que no tenga ese ordenador conectado a internet?.

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.
__________________
:)
Responder Con Cita
  #15  
Antiguo 20-11-2003
Avatar de madman
madman madman is offline
Miembro
 
Registrado: may 2003
Ubicación: Nayarit, México
Posts: 242
Poder: 22
madman Va por buen camino
Comentas que es para una RED. Pero...
¿Tu aplicacion servidor/cliente necesita el internet para poder conectarse?
__________________
Guía de Estilo.

Última edición por madman fecha: 20-11-2003 a las 19:06:32.
Responder Con Cita
  #16  
Antiguo 21-11-2003
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
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.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #17  
Antiguo 21-11-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
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.
__________________
:)
Responder Con Cita
  #18  
Antiguo 21-11-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #19  
Antiguo 21-11-2003
Avatar de madman
madman madman is offline
Miembro
 
Registrado: may 2003
Ubicación: Nayarit, México
Posts: 242
Poder: 22
madman Va por buen camino
Si tienes tu aplicacion en una computadora sin red, creo que puedes conectarte a tu misma computadora.

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 ) 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...
__________________
Guía de Estilo.
Responder Con Cita
  #20  
Antiguo 05-12-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 11:34:44.


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
Copyright 1996-2007 Club Delphi