El chat, entendido como punto de encuentro e intercambio cultural, es sin lugar a dudas uno de los instrumentos más eficaces

y con más solera de Internet. Navegantes y navegantes pasan noches insomnes en chat IRC o ICQ, en una búsqueda continua de experiencias humanas que la realidad no virtual difícilmente aporta. Dejando a un lado el aspecto sociológico, a nosotros nos interesa explicar cómo poner a disposición gratuitamente en los propios sitios una WebChat (chat a la que se llega desde WWW sin el uso de programas client como mIRC). Antes de nada conviene precisar que algunas Community incluyen entre sus servicios la posibilidad de incorporar una Chat. Entre estos Xoom.it se distingue por una excelente interfaz gráfica así como por una también óptima velocidad de transmisión. Por desgracia, sólo los usuarios Xoom pueden servirse de esta chat, que no puede ser exportada a otros web. Para mayores detalles, consulta la página de Xoom.it. Para una solución universal, es decir, independiente de la localización del servidor, te aconsejamos el programa Java que utiliza HTMLpoint en su sitio y al que se llega haciendo clic en este enlace. Se trata de un chat en Java creado por un programador alemán y cuyo .class es directamente enlazable desde el "sitio madre" y posee las siguientes características:  completamente gratuito (no se debe corresponder nada al programador del aplique)  multiplataforma (la escritura en Java permite usarlo en cualquier servidor y programa client)  enlazable desde el sitio del programador (el aplique no reside en tu servidor sino que se descarga en remoto)  personalizable con algunos límites (a continuación veremos cómo)  su uso no requiere ningún tipo de registro previo. En otras palabras, basta con insertar el código HTML para que funcione correctamente. Dicho esto, he aquí el código necesario para el funcionamiento del chat: <applet archive="http://www.leahcim.com/irc/Chat.zip" code="Chat.class" width=580 height=270 codebase="http://www.leahcim.com/irc"> <param name="Language" value="italian"> <param name="Channel" value="#titolo"> <param name="FontSize" value="14"> <param name="ABackColor" value="#000000"> <param name="TBackColor" value="#FFFFDF"> <param name="TForeColor" value="#000000"> <param name="ScrollColor" value="#FFFFD7"> Use a Java-enabled Browser to Chat!!! </applet> Veamos juntos el código línea por línea: <applet archive="http://www.leahcim.com/irc/Chat.zip" code="Chat.class" width=580 height=270 codebase="http://www.leahcim.com/irc"> Es el código que llama al aplique del sitio del creador, indica dónde descargar el archivo zip que contiene los class y establece la anchura (width=580) y altura (height=270) que la página reserva para la visualización del chat. "Chat.class" es el nombre del .class del aplique. <param name="Language" value="italian"> La lengua utilizada en los encabezamientos del chat. <param name="Channel" value="#titolo"> la cabecera del chat que va escrita tras el símbolo de la celdilla.

<param name="FontSize" value="14"> El tamaño de los caracteres dentro del chat. tendrás la posibilidad de chatear con tus visitantes. EJEMPLO DE UN CHAT HECHO EN JAVA . <param name="ABackColor" value="#000000"> <param name="TBackColor" value="#FFFFDF"> <param name="TForeColor" value="#000000"> <param name="ScrollColor" value="#FFFFD7"> Los colores hexadecimales de referencia del chat. Una vez introducido este código en tu sitio. Cuando se abre el chat. aparece una ventana de pop-up en la que se ven pancartas comerciales del creador del programa. que puedes modificar a tu gusto.

length != 1) throw new RuntimeException ("Syntax: ChatServer ").s = s. import java.*. c.*.*. Servidor de chat El servidor se implementa haciendo uso del multi-threading. protected DataOutputStream o.util.println ("Accepted from " + client. import java.Aquí veremos un ejemplo relativamente completo. new ChatServer (Integer. import java. } protected static Vector handlers = new Vector ().net. i = new DataInputStream (new BufferedInputStream (s.start ().net. p ublic void run () { .io. System. para no limitar el número máximo de usuarios que se conecten al servicio.io. El servidor será el siguiente: Servidor de chat: clase ChatServer import java. protected DataInputStream i.getOutputStream ())). ChatHandler c = new ChatHandler (client).getInetAddress ()).*.getInputStream ())).util. while (true) { Socket client = server. import java. public ChatHandler (Socket s) throws IOException { this. Para ello vamos a construir una aplicación cliente-servidor que implemente un servicio de chat: una serie de usuarios (clientes) se conectan al chat (servidor) de forma que cada información transmitida por un usuario le llega a todos los demás.parseInt (args[0])).*. } } public static void main (String args[]) throws IOException { if (args. public class ChatServer { public ChatServer (int port) throws IOException { ServerSocket server = new ServerSocket (port). } } Servidor de chat: clase ChatHandler import java.out.accept (). en donde se tratan todos los aspectos que se realizan para una comunicación Chat (Servidor Chat y Cliente Chat). 1. o = new DataOutputStream (new BufferedOutputStream (s.*. public class ChatHandler extends Thread { protected Socket s.

try { s.readUTF ().stop ().o.o) { c.nextElement (). } } } } 2. la mayor parte del código es similar. Cliente de chat El programa cliente se ha implementado tanto en forma de aplicación como en forma de applet. broadcast (name + " has left.printStackTrace ().toString (). Como se puede observar. while (e.close (). while (true) { String msg = i. try { synchronized (c.getInetAddress (). } c.addElement (this). } } } protected static void broadcast (String message) { synchronized (handlers) { Enumeration e = handlers.writeUTF (message).o. } finally { handlers." + msg).java 1.elements (). } catch (IOException ex) { ex. en general.String name = s. } } catch (IOException ex) { ex. try { broadcast (name + " has joined. Cliente de chat: aplicación /** * ChatClient. } catch (IOException ex) { c.00 98/10/05 Humberto MartÌnez Barber· * * Basado en ChatApplet de Merlin Hughes */ .").hasMoreElements ()) { ChatHandler c = (ChatHandler) e.removeElement (this). broadcast (name + " . handlers.printStackTrace().").flush ().

hide (). } finally { listener = null. pack (). protected TextField input.target == input) && (e.printStackTrace (). setLayout (new BorderLayout ()). public class ChatClient extends Frame implements Runnable { protected DataInputStream i. output.setEditable (false). validate (). listener. this. } catch (IOException ex) { ex.readUTF ().close ().ACTION_EVENT)) { try { o. protected TextArea output.id == Event. import java.*. OutputStream o) { super (title).requestFocus (). } } catch (IOException ex) { ex.import java.awt.*. listener = new Thread (this).net.i = new DataInputStream (new BufferedInputStream (i)). try { o.flush (). o.start ().appendText (line + "\n"). protected DataOutputStream o. } } } public boolean handleEvent (Event e) { if ((e. protected Thread listener. show (). } public void run () { try { while (true) { String line = i. output. input. input = new TextField ()).writeUTF ((String) e. output = new TextArea ()).printStackTrace (). input. this. public ChatClient (String title. add ("South". } catch (IOException ex) { . import java.o = new DataOutputStream (new BufferedOutputStream (o)).*.io. InputStream i. add ("Center".arg).

return true. } input.getOutputStream ()).awt. Socket s = new Socket (args[0]. s.id == Event. protected TextField input. } public static void main (String args[]) throws IOException { if (args.00 96/11/01 Merlin Hughes * * Copyright (c) 1996 Prominence Dot Com. } else if ((e.*. import java.*.*.java 1. Integer. return true. // Applet parameters: // host = host name // port = host port public class ChatApplet extends Applet implements Runnable { protected DataInputStream i.com/ merlin[arroba]prominence. and distribute this software * for non-commercial purposes and without fee is hereby granted * provided that this copyright notice appears in all copies.setText ("").target == this) && (e. protected TextArea output.handleEvent (e). listener. import java. * * Permission to use. import java. } Cliente de chat: applet /** * ChatApplet.*.stop (). } return super.getInputStream (). * * http://prominence. s.stop (). All Rights Reserved.parseInt (args[1])).WINDOW_DESTROY)) { if (listener != null) listener.com */ import java. copy. Inc. modify. new ChatClient ("Chat " + args[0] + ":" + args[1]. .length != 2) throw new RuntimeException ("Syntax: ChatClient ").io.applet.printStackTrace(). protected DataOutputStream o. hide ().net.ex.

if (port == null) port = "9830". } public void start () { listener = new Thread (this). String port = getParameter ("port"). add ("Center". execute ().requestFocus (). } } public void execute () { try { while (true) { String line = i.appendText (line + "\n").start (). output = new TextArea ()). Socket s = new Socket (host. } } catch (IOException ex) { .\n"). } public void run () { try { String host = getParameter ("host"). } public void stop () { if (listener != null) listener.. public void init () { setLayout (new BorderLayout ()). ex.stop (). output.setEditable (false). input. input = new TextField ()).."). listener = null.protected Thread listener. add ("South". output. o = new DataOutputStream (new BufferedOutputStream (s. listener.setEditable (false). input. output.getHost (). i = new DataInputStream (new BufferedInputStream (s.setEditable (true). if (host == null) host = getCodeBase ().getOutputStream ())).readUTF ().parseInt (port)).appendText ("\n" + out).getInputStream ())). Integer.printStackTrace (new PrintStream (out)). output.appendText ("Connecting to " + host + ":" + port + ". input. } catch (IOException ex) { ByteArrayOutputStream out = new ByteArrayOutputStream (). output.appendText (" connected.

target == this) && (e. } else if ((e. hide ().id == Event.printStackTrace(). return true. o. } finally { listener = null. } } . } catch (IOException ex) { ex. ex.ACTION_EVENT)) { try { o.ByteArrayOutputStream out = new ByteArrayOutputStream ().printStackTrace (new PrintStream (out)). } return super.handleEvent (e).flush (). } catch (IOException ex) { ex.arg).appendText (out.hide ().target == input) && (e. } input.setText (""). validate (). input.close ().toString ()).stop ().writeUTF ((String) e. output.WINDOW_DESTROY)) { if (listener != null) listener.printStackTrace (). } } } public boolean handleEvent (Event e) { if ((e.stop (). try { o.id == Event. listener. return true.

Making an xat. Principio del formulario New chat 0 1 http://w w w . MySpace or blog.com chat box is easy and completely free. MySpace users click here.xat.make a chat room for your web page. Just choose a background and size. Facebook users click here.c Click a picture below to change the background: . press the Update button and copy and paste the code from the box below into your web page. To make a chat group click here.

shtml" /><br><small><a target="_BLANK" href="http://xat.xat.12planet.InfoServlet <!--$#-.xatech. .com/myinfo chat/servlet/infolet.php?id=134047251">Go Large! </a></small><br> http://myinfochat.com/web_gear/?cb solo inserter el codigo embebido q seria: <embed src="http://www.Final del formulario http://www.com/web_gear/chat/go_large. var chatwidth = 600.eliveengine.com YOU SHOULD NOT MODIFY THE HTML CODE EXCEPT FOR THE APPLET PARAMETERS--------------> <center> <script language="JavaScript" type="text/javascript"> var chatheight = 500.com/web_gear/chat/chat.com/web_gear/?cb">Get your own Chat Box!</a> <a target="_BLANK" href="http://xat.swf" quality="high" width="540" height="405" name="chat" FlashVars="id=134047251" align="middle" allowScriptAccess="sameDomain" type="application/xshockwave-flash" pluginspage="http://xat.begin secure instant messaging chat server software http://www.com/update_flash.

shit.js"></scr ipt> <PARAM NAME="sessionFilterWords" VALUE="fuck. private chat popup height var chatskinPopupW = "367".au"> <PARAM NAME="guifontstyle" VALUE="1"> <PARAM NAME="guifontsize" VALUE="10"> <PARAM NAME="guifonttype" VALUE="Arial"> <PARAM NAME="guiBackcolor" VALUE="66CCCC"> <PARAM NAME="ifinputWhisperFontColor" VALUE="66CCFF"> <PARAM NAME="roomvalue" VALUE="Asesorias"> <PARAM NAME="roomtopics" VALUE="Programacion"> <PARAM NAME="tabchatBordercolor" VALUE="66CCFF"> .com/myinfochat/profile/myinfochat_top. //select the skin "mac" (supported values are basic. palm. skycloud.var chatskin = "std".au"> <PARAM NAME="sessionOnpagerSound" VALUE="beeper. skynight). future. should set chatskin="skin" first var chatskinPopupH = "405". //for the skin mode only. organizer.myinfochat. //for the skin mode only. mac. private chat popup width </script> <script language="JavaScript" SRC="http://www.asshole"> <PARAM NAME="sessionlanguage" VALUE="spanish"> <PARAM NAME="sessiongroupvalue" VALUE="science"> <PARAM NAME="sessionOnloginSound" VALUE="ring. //replace "std" by "skin" for skin based interface mode var chatskinID ="mac".

myinfochat.b).a_width.frames.a_height) .12planet.applets.<PARAM NAME="tabchatTabcolor" VALUE="66CCCC"> <param name="panelrightShow" value="y"> <param name="tabroomsShow" value="y"> <param name="btfloat" value="n"> <param name="btlogout" value="n"> </APPLET> <br> <font face=arial size=1> <a href="http://www.com">secure instant messaging chat software</a> <a href="http://www.chatapplet.infochatapplet.target.doJoin(a.com">powered by myInfoChat. } function openwindow(page.b) { top.com </a> </font> <br> <br> <script language=javascript> function doJoin(a.document.

'displayWindow'). myWindow.document.scrollbars=yes.document.directories=no.'win1'.open(page. myWindow.write("1. myWindow.hei ght=a_height').location=no.write(document.Paste into your document").write(" <br>"). myWindow.{ window.infochat.write(" <br>").write(" <br>").open(''. menubar=no.resizable=yes.write("3.write("2.write(" <br>"). myWindow.200)"> <input type="button" name="btSave" value="Save chat-transcript" onClick="BtSave()"> </form> .document. myWindow. myWindow.width=a_width.status=no.com/www/icon/icons.html'.document.document.applets.copyhistory=no. myWindow.Type Ctrl+A"). } function BtSave() { myWindow = window. } </script> <form> <input type="button" name="btIcons" value="Icons" onClick="openwindow('http://www.target.document.document.getChatLog()).'toolbar=no.chatapplet.document.50 0.Type Ctrl+C").

Programacion Etiquetas: Java 86 i .</center> <!--$#-.com" --------------> } Chat en Java usando Hilos y Sockets Posted: 16 marzo 2008 by Valsrock in Algoritmos.end free java chat room h<a href="http://www.infochat. Java.

6 Votes Con la finalidad de aplicar nuestros conocimientos acerca de Modelos de Lenguajes de Programación.ademas por la facilidad para implementar Sockets e Hilos . Ventana cliente . La aplicación llamada JavaChat ha sido implementada en Java por ser este un lenguaje orientado a objetos.técnicas empleadas en este aplicación. hemos desarrollado un Chat.

4. usando al servidor como puente para las comunicaciones. La implementación del programa cliente sigue las siguientes ideas: 1. El cliente lanza una petición al servidor para conectarse 3. Se inicia el servidor 2. El servidor se mantiene escuchando cualquier petición de un cliente para conectarse. 6. El servidor lanza un hilo de comunicación con el cliente.Salu2 Javachat: Idea del Proyecto La implementación del programa servidor sigue las siguientes ideas: 1. 3. 4. Si el cliente cierra la comunicación el hilo se rompe y se corta la comunicación con ese cliente. Espero sus mails . El servidor acepta al cliente. El cliente envía y recibe mensajes por el hilo hacia todos o hacia algun usuario específico. Por el hilo se envían y reciben mensajes a través del servidor entre todos los clientes. 5. . Se inicia el cliente 2.Ventana Privado (Editado Marzo del 2009) Agradecería a las personas que han mejorado este proyecto y/o modificado enviarlo a mi correo electronico: valsrock@gmail. El servidor asigna un hilo al cliente al ser aceptado.com .

9. 10. Ejecute la el archivo servidor. Hilos: Un hilo es un flujo de ejecución de código.java 5. con el que sera identificado. 7. Ingrese un nick.Para salir simplemente cierre la ventana y el cliente se desconectará automáticamente. A continuación le aparecerá una ventana mas pequeña en la que podrá comunicarse solo con su contacto.Para esto se ha empleado objetos de la clase ServerSocket y Socket para el servidor y cliente respectivamente que permiten la conexion entre cliente y servidor mientras que los Hilos sirven para hacer que el servidor se mantenga escuchando y no interrumpa su proceso mientras los clientes se comunican a traves de mensajes.Los hilos separados realmente no se ejecutan al mismo tiempo(a menos que se tenga una maquina multiprocesador). Ejecute cuantas veces desee el archivo VentCliente.Ayuda para la aplicación: Siga los siguientes pasos: 1. elija en la lista de contactos a un usuario y luego pulse el botón privado.java 4.Por ejemplo. Para conversar en privado con un solo contacto. Inicie el IDE Netbeans 2. Esta característica de interconectividad entre máquinas hace que el concepto de socket nos sirva de gran utilidad. Abra el proyecto 3. En la ventana que le aparece Ud. podrá conversar con todos a la vez.A continuacion unas definiciones: Sockets:Los sockets no son más que puntos o mecanismos de comunicación entre procesos que permiten que un proceso hable ( emita o reciba información ) con otro proceso incluso estando estos procesos en distintas máquinas. en realidad cada hilo obtiene secuencias de tiempo del mismo procesador. un código podría interaccionar con el usuario mientras realiza tareas de segundo plano de gran consumo de tiempo. podemos hacer que nuestros programas aparentemente realicen varias tareas al mismo tiempo. y mediante hilos. Aqui dejo los link para que prueben este proyecto: . Ingrese “localhost” si los clientes se ejecutan sobre una misma PC. 6. 8.