PDA

Ver la Versión Completa : Chat con Delphi


mjjj
06-04-2009, 16:32:47
Hola amigos del foro,

Aquiero plantearles lo que necesito hacer, ojala me queda guiar a la solución.

Necesito desarrollar un chat en Delphi 2006, que pueda operar con usuarios conectados de forma local y remota al servidor.

Me ayudaría mucho que me aconsejaran que componentes son los idoneos para estos, como funcionan e idealmente un demo.

Estuve investigando en la web y encontre un ejemplo... http://www.ajpdsoft.com/modules.php?...=getit&lid=117, el cual utiliza los componente FastNet.

Este chat funciona bien, pero al cabo de un rato siempre terminada tirando errores. Es por esto que prefiero desarrollar un chat con tros componentes, encontre que tal vez algun Indy pudiese servirme, pero no tengo tan claro esto ni como funcionan.

Espero que me puedan ayudar, aconsejar y explicar algo mas sobre este asunto.

Gracias

Rockin
06-04-2009, 16:58:10
Hola yo tengo implementado uno para mi empresa, aunque no es definitivo, lo hago con los componentes UDP tanto server como clients de las INDY, es muy facil, lo que hago es cuando alguien inicia sesión en la aplicacion (el chat está integrado en la aplicación corporativa) guarda en una tabla el nombre de usuario y la IP que tiene la máquina, luego es tan sencillo como mandar paquetes UDP a la maquina que sea y al puerto definido.

Otra forma mejor, que la implementaré mas adelante, es crearte un servidor de chat en una maquina, y que lo clientes se conecten por medio de TCP.

Espero que te sirva de algo.

Saludos.

Olofi
06-04-2009, 23:31:55
Mira lo primero que debes de tratar es conectar de manera segura dos máquinas en red. Una aplicación que pueda filtrase en los procesos de la otra computadora y pueda mandarse mensajes hacia un memo de su propia aplicación. en el trucomanía beta 3.1 aparece como enviar mensajes de un aplicación a otra creada en delphi. Mediante la API de windows puedes tratar de conectarte de manera segura. Luego te explico como trabajar con lo procesos del ordenador...En la paleta de las conecciones para red si sabes trabajar con variables basura, con Pilas, Listas, y Colas bien implementadas puedes crear listas para los IP y nombres y puedes de manera segura buscar datos sin necesidad de agregar componentes como listbox y otros.

saludos

Julián
07-04-2009, 17:29:23
Hola!

Yo tengo hechos un par de componentes llamados TChatServer y TChatClient que por su nombre ya te puedes imaginar para lo que sirven.

El TChatServer sólo tienes que ponerlo en un form y para activarlo solo tienes que poner a true su propiedad Active. Tiene algunas propiedades que puedes usar opcionalmente, por ejemplo, una contraseña que necesitarán los clientes para poder conectarse, otra para poder identificarse como administrador y otra como operador. Ademas tiene una propiedad de tipo string llamada key, que sirve para que los mensajes que se envían vayan encriptados, a salvo de los sniffers. Tambien tiene control antiflood, y lleva incorporado un sencillo sistema de comandos que pueden usar los clientes, y que es extensible y personalizable.

El TChatClient tambiene s bastante sencillo, tiene un par de metodos Connect y Disconnect, y las suficientes propiedades y metodos como para poder ser usando sin escribir una línea de código, por ejemplo, en una de sus propiedades puedes ponerle un TMemo o TRichEdit en donde iran escribiendose los mensajes recibidos, y en otra puedes ponerle un TEdit en donde puedes escribir mensajes que seran enviados al pulsar intro.

Ademas de eso permite mantener conversaciones privadas entre dos usuarios.

Lo único que le falta para ser perfecto es una función o metodo para poder enviar y recibir archivos.

Para que funcione necesita tener instalados los componentes ICS (http://www.overbyte.be/frame_index.html), que en mi opinión, son muchisimo mejores que los INDY.

Ahora voy a ver si encuentro donde los tengo y los subo, junto con un ejemplo de uso, a http://pabernosmatao.com/downloads (http://www.pabernosmatao.com/downloads).

Y si quieres probarlos antes, son los componentes usados para el chat del ajedrezchat, así que no tienes mas que probarlos.

Otra opción que puede resolverte el problema es instalear un servidor de irc, que hay algunos muy buenos open source, y usar clientes de irc, que los hay mas y menos complicados de usar. En mi página tambien tienes este cliente de irc hecho en delphi (http://pabernosmatao.com/downloads/ircmessenger_1004), con el código fuente, el cual puede servirte.

Un saludo!

mjjj
07-04-2009, 18:21:01
Gracias Julian por tu tiempo, te agradecería enormemente si subes el ejemplo, codigos fuente, componentes, etc.

Me parece que esa es la mejor altermativa a mi problema.

Espero que me puedas ayudar.

Saludos.

Julián
07-04-2009, 20:16:14
Aquí está:

http://pabernosmatao.com/downloads

Con el código fuente y ejemplo de uso. YA sabes que neecsitas tener los ICS de Fpiette.

Y otra cosa: el otro día me puse el delphi2009 (versión de prueba) y no pude poner los componentes ICS, pues daban errores al intentar registrarlos en la paleta, así que me bajé la última versión, compatible con delphi2009, pero una vez bajada pude comprobar que habían cambiado hasta los nombres de los componentes, así que ni me molesté en seguir.

Ademas, tambien tuve bastantes problemas para instalar algunos componentes como los JEDI y algunos otros que venía usando desde hace mucho tiempo. Así que desinstale el delphi2009, pues mi tiempo es escaso para perderlo investigando tonterías. Cauando quiera hacer algo seguiré con mi delphi7 personal, que me va de cine en el vmware.

Un saludo!

PD: Se pueden poner comentarios en la web. Es gratis :D :D

dec
07-04-2009, 20:34:00
Hola,

La "demo", desde luego, funciona estupendamente Julián. Muchas gracias. ;)

dec
07-04-2009, 20:49:20
Hola,

He instalado los ICS sin problemas en Delphi 2009, pero, a la hora de probar la demostración Julián, me encuentro con esto en "Unit1.pas":


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
memo1.Enabled:=true;
memo1.color:=clWhite;
end;


Se ve que está "corrupto" el archivo... o algo así. :rolleyes:

Julián
07-04-2009, 20:55:48
vaya!

Pues esta noche, en cuanto llegue a casa ( y cene y aciueste a los crios y.. ) vuelvo a subir el archivo. Es que lo he subiodo desde el trabajo, y como tenemos el ftp filtrao tengo que andar con el Putty, haciendo ssh tunneling o come se diga. Y se vé que esas cosas no van muy finas.

Tahora!

AH, y ya te preguntaré como has puesto los ICS, que aún tengo el "delphi2009 trial" puesto en el portatil.

dec
07-04-2009, 21:01:49
Hola,

¡Julián! Los cambios para que "icsChat" funcione con Delphi 2009 (y la nueva versión de ICS) son mínimos... ¡sólo toca renombrar una unidad! En efecto, esto es lo que he hecho:

- He añadido al principio de "icsChatServer" el "unit icsChatServer;", puesto que no existía

- He renombrado el archivo "WSocket" a "OverbyteIcsWSocket": la clase "TWSocket" sigue igual

- En la línea 279 de la unidad "icsChatServer" paso a usar "CharInSet()" para que D2009 no se "queje"

¡Y eso es todo! Aparentemente debería funcionar... al menos compila... voy a hacer alguna prueba a ver. Y adjunto el "icsChat" con los cambios, por si alguien los quiere. ;)

mjjj
07-04-2009, 21:16:16
Los componentes ICS los pude bajar e instalar, pero el demo, con los codigo no hay caso.... no los puede bajar... me pueden tirar otro link.


Gracias

Julián
07-04-2009, 23:21:36
Jau!

Ya he puesto el zip arreglao!
Ahora voy a ver si arranco la maquina virtual que tengo por ahí y dejo un chatserver escuchando en el puerto 443, por si quereis hacer alguna prueba :)

En cuanto a lo del delphi2009 y esa ultima version de los ICS lo probé, con el ajedrezchat, y si bien conectaba, despues había otras cosas que no iban nada bien, aúnque eran componentes de la suite JEDI, suite que, en mi opnión se ha convertido en un verdadero engendro que lo que mas da son dolores de cabeza a la hora de instalarla. Lo probaré, de todas formas, en cuento termine unas cosillas que tengo a medio.

Un saludo!

mjjj
08-04-2009, 02:12:36
Julian, gracias puede bajar el ZIP, pero no he podido (no se como hacerlo) instalar los componentes TicsChatServer y TicsChatClient... Me puede explicar

Otra cosa, quise probar el servidor que vas a subir, pero a que Host me tengo que conectar.

Bueno, espero que me puedas ayudar.

Saludos y muchas gracias

Julián
08-04-2009, 04:45:56
Julian, gracias puede bajar el ZIP, pero no he podido (no se como hacerlo) instalar los componentes TicsChatServer y TicsChatClient...


¿Que versión de delphi usas?
¿Tienes los ICS instalados?
En todo caso dinos cual es el mensaje de error que obtienes o cual es el problema en concreto.


Un saludo!

mjjj
08-04-2009, 04:48:55
Utilizo Delphi 2006, tengo instalado los ICS, pero no se como instalar los componentes señalados... no tienen ninguna explicacion de como hacerlo.

Eso.... gracias

dec
08-04-2009, 08:15:57
Hola,

Tienes que crear un nuevo "paquete" (mira en el menú File -> New -> Package) y en dicho paquete añadir las unidades de los componentes. Una vez tengas esto hecho ya podrás instalar el paquete, y tendrás los componentes listos para usar (en la pestaña "ClubDelphi").

mjjj
08-04-2009, 16:02:52
Ok, muchas gracias, logre instalar todo lo necesario.

Ahora, con respecto al código, existe la posibilida de enviar mensajes privado, y como puedo obterner una lista de los usuario conectados?

Como puedo hacer esto??

Saludos

Julián
08-04-2009, 19:46:37
Ok, muchas gracias, logre instalar todo lo necesario.

Ahora, con respecto al código, existe la posibilida de enviar mensajes privado, y como puedo obterner una lista de los usuario conectados?

Como puedo hacer esto??

Hola, se hace con comandos:
Para conversacion privada: /query usuario mensaje ó /msg usuario mensaje
Para lista de usuarios: /list
Y hay mas comandos.

Los comandos también puedes enviarlos con código.

Anoche encontré el protocolo, y el código fuente de un cliente java. Luego lo subiré a la web.

Un saludo!

dec
08-04-2009, 19:53:51
Hola,

A mí se me jorobó el asunto en Delphi 2009. El asunto es que compilar, compila, pero, luego se obtienen errores extraños. Errores que no achaco a tus componentes Julián, porque, con otro proyecto, he probado con Delphi 2009 y lo mismo: compilar, compila, pero, los resultados no son los esperados. Exactamente no sé qué pasa, pero, tampoco sé si debo preocuparme demasiado por Delphi 2009... :rolleyes:

Julián
08-04-2009, 23:06:55
A mí se me jorobó el asunto en Delphi 2009. El asunto es que compilar, compila, pero, luego se obtienen errores extraños. Errores que no achaco a tus componentes Julián, porque, con otro proyecto, he probado con Delphi 2009 y lo mismo: compilar, compila, pero, los resultados no son los esperados. Exactamente no sé qué pasa, pero, tampoco sé si debo preocuparme demasiado por Delphi 2009... :rolleyes:

Lo mismito me paso a mi. Y esta clarisimo que es cosa del Delphi2009. No entiendo el porqué de tanto cambio de una versión a otra. Lo entendería si a cambio ganaramos algo importante, por ejemplo compilación en 64bits o multiplataforma para poder compilar para Linux y otras cosas, pero es que lo que pueda hacer con delphi2009 lo puedo hacer exactamente igual con Delphi7 o con Delphi 6, con la ventaja añadida de que con estos ultimos le das a F1 y encuentras la ayuda que buscas. Que esa es otra. Jé.

En fín, con tu confirmación sobre las tonterías del Delphi2009 ya tengo los datos necesarios para tomar la decisión: A la papelera con el, de toas maneras ni lo he comprao, ni pensaba hacerlo.

Un saludo!

mjjj
09-04-2009, 07:02:11
Como ocupo los comando para enviar mensajes privados, y obtener la lista de usuarios conectados.

alguien me puede ayudar con el codigo porfa... gracias

mjjj
09-04-2009, 08:16:27
Hola... tengo una duda, lo que quiero hacer es que la aplicacion me genera una lista (Tlistbox), con todos los usuarios conectados.

Que esta se actualize cada vez que se conecta o desconecta algun usuario.

Una idea que se me ocurre es que en los eventos OnConnected y OnDisconected del TicsChatClient, llame al evento OnNicklist y tengo el siguiente codigo:


procedure TForm1.ChatClientNickList(Sender: TObject; UserList: TUserList);
var
i: integer;
begin
for i:=0 to UserList.Count-1 do listbox1.Items.Add(UserList.Users[i].Nick)
end;


El problema es que no se como llamar al evento OnNickList desde otro evento.

Se puede hacer esto?
Alguien se le ocurre alguna mejor idea?

Saludos

Julián
09-04-2009, 12:29:36
Puedes usar estos eventos:
OnJoinNick - te dice el username de alguien que ha entrao al chat
OnPartNick - te dice el username de alguien que se ha ido
OnChangeNick - Un usuario se ha cambiado el nombre

El evento OnNickList se produce como respuesta al envio del comando /list y tambien se recibe la primera vez que se establece la conexión.

Hay bastantes mas eventos, lo único que tienes que hacer es curiosear un poco, y ademas, también puedes mirar el código fuente. Y preguntar aquí, claro.

Un saludo!

foxito
18-02-2010, 15:05:49
Hola,

Tienes que crear un nuevo "paquete" (mira en el menú File -> New -> Package) y en dicho paquete añadir las unidades de los componentes. Una vez tengas esto hecho ya podrás instalar el paquete, y tendrás los componentes listos para usar (en la pestaña "ClubDelphi").

Hola mira estuve leyendo como implementar un chat de Julian, pero no puedo instalar los componentes que menciona... ya realice lo que indicas en el mismo pero me marca un error WSocket.dcu no encontrado. Utilizo DELPHI 2007 FOR 32

Gracias

Julián
18-02-2010, 16:44:34
¿has puesto los ICS de FPiette?
Tienes que ponerlos, y despues los icsChatComponents.

Un saludo!

foxito
18-02-2010, 17:11:06
No se nada al respecto... solo instale los PACKAGE de ICS el que se llama D2007Install.GroupProj... me podrias explicar con que empieza... te lo agradeceria.... :)

:D

Gracias

foxito
18-02-2010, 17:55:18
¿has puesto los ICS de FPiette?
Tienes que ponerlos, y despues los icsChatComponents.

Un saludo!

No se nada al respecto... solo instale los PACKAGE de ICS el que se llama D2007Install.GroupProj... me podrias explicar con que empieza... te lo agradeceria.... :)

:D

Gracias

foxito
16-03-2010, 20:38:22
Los componentes ICS los pude bajar e instalar, pero el demo, con los codigo no hay caso.... no los puede bajar... me pueden tirar otro link.


Gracias


Hola mjjj que procedimiento realizastes para instalar los ICS que te te pasoron los colegas es no puedo instalar:D

foxito
17-03-2010, 14:29:27
Hola MJJJ, no he podido instalar los componentes ICS... si me lees

jusnjosesch
05-07-2010, 22:09:00
Hola!

Yo tengo hechos un par de componentes llamados TChatServer y TChatClient que por su nombre ya te puedes imaginar para lo que sirven.

El TChatServer sólo tienes que ponerlo en un form y para activarlo solo tienes que poner a true su propiedad Active. Tiene algunas propiedades que puedes usar opcionalmente, por ejemplo, una contraseña que necesitarán los clientes para poder conectarse, otra para poder identificarse como administrador y otra como operador. Ademas tiene una propiedad de tipo string llamada key, que sirve para que los mensajes que se envían vayan encriptados, a salvo de los sniffers. Tambien tiene control antiflood, y lleva incorporado un sencillo sistema de comandos que pueden usar los clientes, y que es extensible y personalizable.

El TChatClient tambiene s bastante sencillo, tiene un par de metodos Connect y Disconnect, y las suficientes propiedades y metodos como para poder ser usando sin escribir una línea de código, por ejemplo, en una de sus propiedades puedes ponerle un TMemo o TRichEdit en donde iran escribiendose los mensajes recibidos, y en otra puedes ponerle un TEdit en donde puedes escribir mensajes que seran enviados al pulsar intro.

Ademas de eso permite mantener conversaciones privadas entre dos usuarios.

Lo único que le falta para ser perfecto es una función o metodo para poder enviar y recibir archivos.

Para que funcione necesita tener instalados los componentes ICS (http://www.overbyte.be/frame_index.html), que en mi opinión, son muchisimo mejores que los INDY.

Ahora voy a ver si encuentro donde los tengo y los subo, junto con un ejemplo de uso, a http://pabernosmatao.com/downloads (http://www.pabernosmatao.com/downloads).

Y si quieres probarlos antes, son los componentes usados para el chat del ajedrezchat, así que no tienes mas que probarlos.

Otra opción que puede resolverte el problema es instalear un servidor de irc, que hay algunos muy buenos open source, y usar clientes de irc, que los hay mas y menos complicados de usar. En mi página tambien tienes este cliente de irc hecho en delphi (http://pabernosmatao.com/downloads/ircmessenger_1004), con el código fuente, el cual puede servirte.

Un saludo!
Julian, he probado tus componentes para chat y funcionan perfecto, son excelentes, pero no puedo encontrar la forma de hacer una conversación entre dos usuarios, me podrías explicar, si no es mucha molestia.
Gracias Mil

jusnjosesch
05-07-2010, 22:13:36
Como se hacen las conversaciones privadas?

Ñuño Martínez
06-07-2010, 14:00:37
Creo recordar que se necesita un número mínimo de mensajes, para evitar abusos.

edgwin
13-08-2010, 19:05:48
Amigo Julian.

Intente instalar tus componentes en Delphi 2010 sin exito, ya instale los componentes de ICS para D2010 pero me marca errores "No existe el archivo wsocket.dcu", bueno, este y el archivo de wsockBuf.dcu ya los consegui, los puse en el directorio de librerias. Pero me sigue marcando muchos errores.

Tendras la version de Delphi 2010 de estos componentes?

Saludos!

kdemia
13-08-2010, 20:22:37
Con IUDPClient, mira este LINK (http://delphiallimite.blogspot.com/search/label/aplicaci%C3%B3n), aca te explica como hacer un chat, yo lo hice y funciona, lo unico que cuando dice PChar vas a tener q poner PAnsiChar

Saludos

edgwin
13-08-2010, 20:30:17
Amigo, este chat funciona en internet, es decir, con IPs dinamicas?

Saludos!

kdemia
13-08-2010, 20:45:47
si, lo unico que si tenes router tenes que abrir el puerto que uses...

edgwin
13-08-2010, 21:08:51
Gracias lo voy a probar

Saludos!

edgwin
13-08-2010, 21:30:13
Una pregunta Kdemia.

En esta aplicacion de chat, me imagino que debo de dar de alta una cuenta DynDns a asociarla a las PC valla a instalar la aplicacion, ¿me equivoco?

kdemia
13-08-2010, 21:40:32
nono.. solamente abris el puerto que uses (ahi usa el 80), pones la ip de la PC que recibe (ya sea en LAN o en WAN) y envias.. y fijate que mas abajo hay otro chat mas dinamico...

Saludos