Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   como crear un chat en delphi (https://www.clubdelphi.com/foros/showthread.php?t=38523)

chvc 17-12-2006 13:49:45

como crear un chat en delphi
 
Hola a todos, lo que pasa es que nesesito crear un a aplicacion que lleve un chat donde se puedan estar un promedio de 300 personas en linea con delphi 7 y con su respectiva lista donde aparecen los conectados, y me gustaria saber que componentes me pueden servir para poder realizarlo. de antemano muchas gracias:rolleyes:

seoane 17-12-2006 14:22:36

Si no me equivoco con el propio delphi 7 te viene una demostración de como realizar un chat usando sockets. Compruebalo ....

De todas formas yo te sugiero otra idea. No se si el chat que tienes que hacer tiene que realizarse de una manera determinada (un trabajo para clase) o puedes utilizar la que tu prefieras. Si es este ultimo caso te propongo realizar el chat utilizando un método llamado "http polling". Este se basa en que el servidor mantiene una lista con todos los mensajes que aparecen en la conversación y los clientes a intervalos regulares se conectan al servidor por http y bajan los mensajes nuevos que han aparecido. De la misma forma si quieren publicar un mensaje envían el mensaje usando el método Post o Get del protocolo http.

Algunos messenger ya implementan este sistema, sobre todo porque puede atravesar un proxy http sin problemas, pero suelen utilizar protocolos bastante complejos. Puedes usar alguno de esos protocolos, o podemos pensar en uno mas sencillito. Así utilizando los componentes Indy, en el servidor podríamos usar tidHttpServer y en los clientes tidHttpClient, y no tendremos que meternos a manejar sockets, que pueden ser un dolor de cabeza :)

No se que te parece la idea :confused:

chvc 17-12-2006 14:39:02

el metodo que me acabas de decir de tidHttpClient y su tidHttpServer me suena muy bien, aunque la verdad es la primera vez que escucho mencionar esos dos componentes jejeje

sera que puedes darme algun sitio web que tenga ejemplos acerca de ellos?

dec 17-12-2006 14:59:52

Hola,

Echa un vistazo a los componentes Indy. Si descargas "The 'old' Indy 9 demos" de la página de ejemplos encontrarás una carpeta de nombre "Chat". Creo que puede darte alguna idea por lo menos.

seoane 17-12-2006 15:01:03

Cita:

Empezado por chvc
el metodo que me acabas de decir de tidHttpClient y su tidHttpServer me suena muy bien, aunque la verdad es la primera vez que escucho mencionar esos dos componentes jejeje

sera que puedes darme algun sitio web que tenga ejemplos acerca de ellos?

Los componentes Indy vienen incluidos con el Delphi 7, buscalos en la paleta de componentes. Aunque también puedes bajarte su ultima versión desde su propia pagina

http://www.indyproject.org/Sockets/index.en.aspx

en la que también encontraras algún ejemplo. También encontraras mucha información en los foros sobre estos componentes, son muy conocidos y utilizados.

Y ya por último, te dejo una idea, que quizá es demasiado para lo que tu necesitas. Seguir usando http, pero subir un nivel mas y usar xml-rpc. Este protocolo nos permite ejecutar procedimientos remotos, básicamente definiríamos 3 funciones ("MandarMensaje", "RecibirMensajes", "ListarUsuarios") que nuestro cliente ejecutaría sobre el servidor. Esto que suena muy complicado, resulta ser muy sencillo. Es un método similar al que uso nuestro amigo dec para crear la API de su sitio web loturak, sobre la que ya hablamos en este otro hilo . En ese hilo dec nos habla sobre unos componentes que implementan el protocolo xml-rpc para delphi. Entre otras ventajas, el propio componente se encargaría de toda la comunicación, y además mas adelante tendríamos la posibilidad de montar el servidor usando php, que puede manejar xml-rpc sin problemas.

:p Bueno, ya dije que esta ultima idea quizá era demasiado complicada. Pero piensatelo, mientras tanto familiarizate con los componentes Indy y cuando sepas manejarlos, pensaremos como puedes usarlos en tu proyecto de chat.

FlorErf 21-12-2006 22:16:26

Aqui te va el chat para la cantidad de personas que quieras
 
Ahora este chat es medio primitivo y para una Local NetWork, la verdad esta compuesto por una aplicacion que es el servidor y otra que es el cliente.
Tambien utilizo los componentes ClientSocket y ServerSocket, que si los buscas en el delphi 7 no los vas a encontrar porque este paquete hay que instalarlos.
Instalar ClientSocket y ClientServer en delphi 7
1- Abres el delphi, Menú component / install Packages / add

Buscan en Archivos de Programas / Borland / Delphi 7/ Bin / dclsockets70.bpl

este paquete se instala con ayuda y todo, dentro de la paleta Internet.

Entoces a trabajar:

Empesemos por la amplicacion cliente:
Antes de empesar:
las conexiones de red si no me equivoco y si lo hago porfavor rectificar, se conectan por conextion que se llaman socket es como un hilo, y estos salen por los puertos de TCP/Ip que pueden ser cualquiera, necesitamos evitar conectarnos por los puertos estandar como los de htto, ftp, POP de correo, etc, los componetes ClientSocket y ServerSocket tienen una propiedad llamada Port, que este es la que dice por el puerto que se van a hacer las trasnferencias de datos, lo que, el clientsocket y el serversocket tienen que tener en esta propiedad el mismo puerto como el 1050, ejemplo y es el que bamos a utilizar. asi que ponte este numero en la propiedad port del cliente y despues en el del servidor.

Insercion de componentes:
1- StatusBar, con la propiedad ALing en Albutton. Paleta Win32.
2- Memo1, con la propiedad alin igual que el statusbar, Paleta Standar.
3- Spliter, con la propiedad alin igual que el statusbar, paleta additional.
4- Memo2, con la propiedad aling AlClient, Paleta Standar.
5- Panel, con a propiedad aling alTop. Agregas una panel a esta barra dando sobre ella doble clic y en el boton add.
6- Label, Propiedad Caption = 'Conectar a: '
7-
Edit1, borras el texo en la propiedad de mismo nombre.
8- Boton, Caption = 'Concetar / Desconectar'
9-
Insertas el ClientSocket, paleta Internet.

Programacion de Eventos:
1- Genera un evento Onclic para el Boton con el siguiente codigo.

if ClientSocket1.Active=true
then ClientSocket1.Active := False
else begin
ClientSocket1.Host := Edit1.Text;
ClientSocket1.Active := True;
end;
Nota: aqui el boton pregunta si el cliente esta activado, es decir en busqueda de servidores y conectados a ellos, si lo esta lo desactiva y si esta dasactivado le dice a que maquina se va a conectar y lo activa para que se conecte.
2- Genera un Evento KeyDown Para el memo1 con el codigo.

if Key = VK_Return
then ClientSocket1.Socket.SendText(Memo1.Lines[Memo1.Lines.Count-1]);

Nota: bueno esta linea esta casi que en spanish solo que, el cliente tiene una metodo que se llama socket este trabaja directo sobre la conexion establesida por el cliente y el servidor, por esta se pueden recivir datos y mandar datos como senttext()3- Genera un evento para el ClientSocketRed con el codigo

Memo2.Lines.Add(Socket.ReceiveText);

este recibe el texto que manda el server.
Ahora bamos a general codigo para el estado de la conexcion.
4- Genera evento para ClientSocket1Connect con el codigo

StatusBar1.Panels[0].Text :='Me conecte a '+ClientSocket1.Host;

nos informa a que maquina se conecto.
4- evento para el ClientSocket1Disconnect con el codigo

StatusBar1.Panels[0].Text :='Me desconecte';

informa cuando se ha desconectado
5- evento para ClientSocket1Error con el codigo

StatusBar1.Panels[0].Text :='No me puedo conectar con '+ClientSocket1.Host;
ErrorCode := 0;

informa cuando no se puede conectar al servidor.

Bueno hasta aqui con el cliente.

Programacion del Servidor:

Nota: agraga los mismos componentes y sus propiedades en la aplicacion servidor solo que esta vez con el componete serversocket y sin el edit, y el boton con el captio = activar / dasactivar.
REcuerda la propiedad port. del serversocket
Programacion de eventos:
1- Genera evento para el onclic del boton con el codigo

If ServerSocket1.Active = true
then begin
ServerSocket1.Active := false;
StatusBar1.Panels[0].Text:='Desactivado el Servidor';
end
Else Begin
serverSocket1.Active:=true;
StatusBar1.Panels[0].Text:='Activado el Servidor';
end;

esto dasactiva el server si esta acitvado y lo informa al statusbar y biseversa. Activar, esto hace que le server este a la escucha de peticiones de los clientes para que pudan conectarce.
2- Genera un evento para el Memo1 keydonw con el codigo
[i]
Var
i:Integer;
begin
If (key = vk_return) and (ServerSocket1.Socket.Connected=true)
then Begin
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
serverSocket1.Socket.Connections.SendText(Memo1.Lines[Memo1.Lines.Count-1]);
Memo2.Lines.Add(Memo1.Lines[Memo1.Lines.count-1]);
end;

esto envia el texto escrito a todos los clientes que esten conectado a server y se lo manda a el mismo para que sea visualizado en la conversacion.
3- genera un evento para ServerSocket1 sobre ClientRead con el codigo
[i]
Var
i:Integer;
Texto:string;
begin

Texto:=Socket.ReceiveText;
Memo2.Lines.Add(texto);
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections.SendText(Texto);

esto captura el mensaje enviado por un cliente, lo muestra en pantalla en el server y lo manda para todos los clientes para haci seguir en la conversacion.
[i]ServerSocket1.Socket.Connections esto accede a todos los clientes que tiene el server, porque recuerda que tiene que conectar a muchas personas.
ServerSocket1.Socket.ActiveConnections-1 meda la cantidad de clientes que hay conectados, empesando por el primero que tiene el indise 0.

-- general codigo para controlar el estado de la conexion.
4- genral evento para ServerSocket1 en el evento ClientConnect

StatusBar1.Panels[0].Text:='Se ha conectado '+ServerSocket1.Socket.LocalHost;

5- general evento para ServerSocket1 sobre ClientDisconnect con el codigo

StatusBar1.Panels[0].Text:='Se ha desconectado '+ServerSocket1.Socket.LocalHost;

6- general evento para ServerSocket1 sobre Listen

StatusBar1.Panels.Items[0].Text := 'Escuchando...';

bueno esto es todo lo que tengo que decirles, al que le sirva que lo pruebe y si no le sale algo y usted no lo pueda solucional o este yo equivocado o conosta usted una manera mejor porfavor de mostramela

me dirrecion es leonel06033@cfg.jovenclub.cu

espero que todo este bien saludos.

Maury Manosalva 22-12-2006 01:17:16

No entendi este pedazo en el chat
 
5- Panel, con a propiedad aling alTop. Agregas una panel a esta barra dando sobre ella doble clic y en el boton add.

no lo entendi, me lo puedes explicar.. mil gracias

FlorErf 22-12-2006 18:30:35

Aclaracion del tema 5- agregar un panel
 
mira amigo me confundi, disculpen, mira solo es agregar el panel y aliniarlo a altop, toda la parte de arriba de la form.

donde hay que agregar un panel nuevo es en el statusbar1, que en este se la da doble clic sobre el, sale una ventana y en esta hay una boton que se llama add, presionas sobre este y se agrega una nueva area donde se puede escribir que en esta es donde se pueden motrar los texto de notificaciones, o sino clikeas en el objet inspector en la propiedas panels.. esta propiedad es del statusbar1.

saludos y disculpen las molestias.

Maury Manosalva 22-12-2006 20:29:14

No me funciono el chat
 
Hola, aunque ya escribi al correo que dejaste, nuevamente lo digo por este medio, eme esta mostrando errores en el servidor, proble el cliente y funciona perfecto, pero no puedo probar hasta que el servidor este bien, y gracias por la respuesta a mi pregunta. muy gentil.

maury manosalva

fide 30-12-2006 18:36:45

hola
 
hola ami me llamo franklin y mi nick ak en el clubdelphi es fbueno, me gustara que me ayudases con mas informacion en esto si no te es molestia, eso te lo agradeceria mucho, mi correo es anamcw@infosol.gtm.sld.cu
soy cubano .:cool:

fide 31-12-2006 20:52:08

Chat en delphi 7
 
Hola, te puedo recomendar un componente que está en la pestaña IndyClients y se llama idIRCClient y es súper bueno para trabajar con el IRC. Solo nenecitas un servidor montado como el Unreal IRC o uno que crees tu mismo, ya que en la pestaña IndyServers está el IdIRCServer que te crea un servidor. Si quieres más detalles sobre esto, por favor no dudes en preguntarme.

Que pases un buen fin de año.

DarkSton 03-05-2021 23:14:42

Cita:

Empezado por FlorErf (Mensaje 174034)
Ahora este chat es medio primitivo y para una Local NetWork, la verdad esta compuesto por una aplicacion que es el servidor y otra que es el cliente.
Tambien utilizo los componentes ClientSocket y ServerSocket, que si los buscas en el delphi 7 no los vas a encontrar porque este paquete hay que instalarlos.
Instalar ClientSocket y ClientServer en delphi 7
1- Abres el delphi, Menú component / install Packages / add

Buscan en Archivos de Programas / Borland / Delphi 7/ Bin / dclsockets70.bpl

este paquete se instala con ayuda y todo, dentro de la paleta Internet.

Entoces a trabajar:

Empesemos por la amplicacion cliente:
Antes de empesar:
las conexiones de red si no me equivoco y si lo hago porfavor rectificar, se conectan por conextion que se llaman socket es como un hilo, y estos salen por los puertos de TCP/Ip que pueden ser cualquiera, necesitamos evitar conectarnos por los puertos estandar como los de htto, ftp, POP de correo, etc, los componetes ClientSocket y ServerSocket tienen una propiedad llamada Port, que este es la que dice por el puerto que se van a hacer las trasnferencias de datos, lo que, el clientsocket y el serversocket tienen que tener en esta propiedad el mismo puerto como el 1050, ejemplo y es el que bamos a utilizar. asi que ponte este numero en la propiedad port del cliente y despues en el del servidor.

Insercion de componentes:
1- StatusBar, con la propiedad ALing en Albutton. Paleta Win32.
2- Memo1, con la propiedad alin igual que el statusbar, Paleta Standar.
3- Spliter, con la propiedad alin igual que el statusbar, paleta additional.
4- Memo2, con la propiedad aling AlClient, Paleta Standar.
5- Panel, con a propiedad aling alTop. Agregas una panel a esta barra dando sobre ella doble clic y en el boton add.
6- Label, Propiedad Caption = 'Conectar a: '
7-
Edit1, borras el texo en la propiedad de mismo nombre.
8- Boton, Caption = 'Concetar / Desconectar'
9-
Insertas el ClientSocket, paleta Internet.

Programacion de Eventos:
1- Genera un evento Onclic para el Boton con el siguiente codigo.

if ClientSocket1.Active=true
then ClientSocket1.Active := False
else begin
ClientSocket1.Host := Edit1.Text;
ClientSocket1.Active := True;
end;
Nota: aqui el boton pregunta si el cliente esta activado, es decir en busqueda de servidores y conectados a ellos, si lo esta lo desactiva y si esta dasactivado le dice a que maquina se va a conectar y lo activa para que se conecte.
2- Genera un Evento KeyDown Para el memo1 con el codigo.

if Key = VK_Return
then ClientSocket1.Socket.SendText(Memo1.Lines[Memo1.Lines.Count-1]);

Nota: bueno esta linea esta casi que en spanish solo que, el cliente tiene una metodo que se llama socket este trabaja directo sobre la conexion establesida por el cliente y el servidor, por esta se pueden recivir datos y mandar datos como senttext()3- Genera un evento para el ClientSocketRed con el codigo

Memo2.Lines.Add(Socket.ReceiveText);

este recibe el texto que manda el server.
Ahora bamos a general codigo para el estado de la conexcion.
4- Genera evento para ClientSocket1Connect con el codigo

StatusBar1.Panels[0].Text :='Me conecte a '+ClientSocket1.Host;

nos informa a que maquina se conecto.
4- evento para el ClientSocket1Disconnect con el codigo

StatusBar1.Panels[0].Text :='Me desconecte';

informa cuando se ha desconectado
5- evento para ClientSocket1Error con el codigo

StatusBar1.Panels[0].Text :='No me puedo conectar con '+ClientSocket1.Host;
ErrorCode := 0;

informa cuando no se puede conectar al servidor.

Bueno hasta aqui con el cliente.

Programacion del Servidor:

Nota: agraga los mismos componentes y sus propiedades en la aplicacion servidor solo que esta vez con el componete serversocket y sin el edit, y el boton con el captio = activar / dasactivar.
REcuerda la propiedad port. del serversocket
Programacion de eventos:
1- Genera evento para el onclic del boton con el codigo

If ServerSocket1.Active = true
then begin
ServerSocket1.Active := false;
StatusBar1.Panels[0].Text:='Desactivado el Servidor';
end
Else Begin
serverSocket1.Active:=true;
StatusBar1.Panels[0].Text:='Activado el Servidor';
end;

esto dasactiva el server si esta acitvado y lo informa al statusbar y biseversa. Activar, esto hace que le server este a la escucha de peticiones de los clientes para que pudan conectarce.
2- Genera un evento para el Memo1 keydonw con el codigo
[i]
Var
i:Integer;
begin
If (key = vk_return) and (ServerSocket1.Socket.Connected=true)
then Begin
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
serverSocket1.Socket.Connections.SendText(Memo1.Lines[Memo1.Lines.Count-1]);
Memo2.Lines.Add(Memo1.Lines[Memo1.Lines.count-1]);
end;

esto envia el texto escrito a todos los clientes que esten conectado a server y se lo manda a el mismo para que sea visualizado en la conversacion.
3- genera un evento para ServerSocket1 sobre ClientRead con el codigo
[i]
Var
i:Integer;
Texto:string;
begin

Texto:=Socket.ReceiveText;
Memo2.Lines.Add(texto);
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections.SendText(Texto);

esto captura el mensaje enviado por un cliente, lo muestra en pantalla en el server y lo manda para todos los clientes para haci seguir en la conversacion.
[i]ServerSocket1.Socket.Connections esto accede a todos los clientes que tiene el server, porque recuerda que tiene que conectar a muchas personas.
ServerSocket1.Socket.ActiveConnections-1 meda la cantidad de clientes que hay conectados, empesando por el primero que tiene el indise 0.
-- general codigo para controlar el estado de la conexion.
4- genral evento para ServerSocket1 en el evento ClientConnect
StatusBar1.Panels[0].Text:='Se ha conectado '+ServerSocket1.Socket.LocalHost;

5- general evento para ServerSocket1 sobre ClientDisconnect con el codigo
StatusBar1.Panels[0].Text:='Se ha desconectado '+ServerSocket1.Socket.LocalHost;

6- general evento para ServerSocket1 sobre Listen

StatusBar1.Panels.Items[0].Text := 'Escuchando...';

bueno esto es todo lo que tengo que decirles, al que le sirva que lo pruebe y si no le sale algo y usted no lo pueda solucional o este yo equivocado o conosta usted una manera mejor porfavor de mostramela

me dirrecion es leonel06033@cfg.jovenclub.cu

espero que todo este bien saludos.

Amigo yo tengo un código parecido pero hace tiempo pude hacer algo para enviar un mensaje a una IP que yo quería , en ves de enviar un mensaje global puse otra opción para yo poner la IP y mandar un mensaje a dicha IP , podrías pone un ejemplo haci


La franja horaria es GMT +2. Ahora son las 06:40:47.

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