![]() |
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:
|
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: |
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? |
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. |
Cita:
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. |
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. |
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 |
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. |
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 |
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: |
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. |
Cita:
|
La franja horaria es GMT +2. Ahora son las 08:29:01. |
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