Anda di halaman 1dari 17

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.

<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, que puedes modificar a tu gusto.

Una vez introducido este código en tu sitio, tendrás la posibilidad de chatear con tus visitantes.
Cuando se abre el chat, aparece una ventana de pop-up en la que se ven pancartas comerciales
del creador del programa.

EJEMPLO DE UN CHAT HECHO EN JAVA


Aquí veremos un ejemplo relativamente completo, en donde se tratan todos los aspectos
que se realizan para una comunicación Chat (Servidor Chat y Cliente Chat). 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.
1. Servidor de chat
El servidor se implementa haciendo uso del multi-threading, para no limitar el número
máximo de usuarios que se conecten al servicio. El servidor será el siguiente:

Servidor de chat: clase ChatServer

import java.net.*;
import java.io.*;
import java.util.*;

public class ChatServer {


public ChatServer (int port) throws IOException {
ServerSocket server = new ServerSocket (port);
while (true) {
Socket client = server.accept ();
System.out.println ("Accepted from " + client.getInetAddress ());
ChatHandler c = new ChatHandler (client);
c.start ();
}
}
public static void main (String args[]) throws IOException {
if (args.length != 1)
throw new RuntimeException ("Syntax: ChatServer ");
new ChatServer (Integer.parseInt (args[0]));
}
}

Servidor de chat: clase ChatHandler

import java.net.*;
import java.io.*;
import java.util.*;
public class ChatHandler extends Thread {
protected Socket s;
protected DataInputStream i;
protected DataOutputStream o;
public ChatHandler (Socket s) throws IOException {
this.s = s;
i = new DataInputStream (new BufferedInputStream (s.getInputStream ()));
o = new DataOutputStream (new BufferedOutputStream (s.getOutputStream ()));
}
protected static Vector handlers = new Vector ();
p ublic void run () {
String name = s.getInetAddress ().toString ();
try {
broadcast (name + " has joined.");
handlers.addElement (this);
while (true) {
String msg = i.readUTF ();
broadcast (name + " - " + msg);
}
} catch (IOException ex) {
ex.printStackTrace ();
} finally {
handlers.removeElement (this);
broadcast (name + " has left.");
try {
s.close ();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
protected static void broadcast (String message) {
synchronized (handlers) {
Enumeration e = handlers.elements ();
while (e.hasMoreElements ()) {
ChatHandler c = (ChatHandler) e.nextElement ();
try {
synchronized (c.o) {
c.o.writeUTF (message);
}
c.o.flush ();
} catch (IOException ex) {
c.stop ();
}
}
}
}

2. Cliente de chat
El programa cliente se ha implementado tanto en forma de aplicación como en forma de
applet. Como se puede observar, en general, la mayor parte del código es similar.

Cliente de chat: aplicación

/**
* ChatClient.java 1.00 98/10/05 Humberto MartÌnez Barber·
*
* Basado en ChatApplet de Merlin Hughes
*/
import java.net.*;
import java.io.*;
import java.awt.*;
public class ChatClient extends Frame implements Runnable {
protected DataInputStream i;
protected DataOutputStream o;
protected TextArea output;
protected TextField input;
protected Thread listener;
public ChatClient (String title, InputStream i, OutputStream o) {
super (title);
this.i = new DataInputStream (new BufferedInputStream (i));
this.o = new DataOutputStream (new BufferedOutputStream (o));
setLayout (new BorderLayout ());
add ("Center", output = new TextArea ());
output.setEditable (false);
add ("South", input = new TextField ());
pack ();
show ();
input.requestFocus ();
listener = new Thread (this);
listener.start ();
}
public void run () {
try {
while (true) {
String line = i.readUTF ();
output.appendText (line + "\n");
}
} catch (IOException ex) {
ex.printStackTrace ();
} finally {
listener = null;
input.hide ();
validate ();
try {
o.close ();
} catch (IOException ex) {
ex.printStackTrace ();
}
}
}
public boolean handleEvent (Event e) {
if ((e.target == input) && (e.id == Event.ACTION_EVENT)) {
try {
o.writeUTF ((String) e.arg);
o.flush ();
} catch (IOException ex) {
ex.printStackTrace();
listener.stop ();
}
input.setText ("");
return true;
} else if ((e.target == this) && (e.id == Event.WINDOW_DESTROY)) {
if (listener != null)
listener.stop ();
hide ();
return true;
}
return super.handleEvent (e);
}
public static void main (String args[]) throws IOException {
if (args.length != 2)
throw new RuntimeException ("Syntax: ChatClient ");
Socket s = new Socket (args[0], Integer.parseInt (args[1]));
new ChatClient ("Chat " + args[0] + ":" + args[1],
s.getInputStream (), s.getOutputStream ());
}

Cliente de chat: applet

/**
* ChatApplet.java 1.00 96/11/01 Merlin Hughes
*
* Copyright (c) 1996 Prominence Dot Com, Inc. All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software
* for non-commercial purposes and without fee is hereby granted
* provided that this copyright notice appears in all copies.
*
* http://prominence.com/ merlin[arroba]prominence.com
*/
import java.net.*;
import java.io.*;
import java.awt.*;
import java.applet.*;
// Applet parameters:
// host = host name
// port = host port
public class ChatApplet extends Applet implements Runnable {
protected DataInputStream i;
protected DataOutputStream o;
protected TextArea output;
protected TextField input;
protected Thread listener;
public void init () {
setLayout (new BorderLayout ());
add ("Center", output = new TextArea ());
output.setEditable (false);
add ("South", input = new TextField ());
input.setEditable (false);
}
public void start () {
listener = new Thread (this);
listener.start ();
}
public void stop () {
if (listener != null)
listener.stop ();
listener = null;
}
public void run () {
try {
String host = getParameter ("host");
if (host == null)
host = getCodeBase ().getHost ();
String port = getParameter ("port");
if (port == null)
port = "9830";
output.appendText ("Connecting to " + host + ":" + port + "...");
Socket s = new Socket (host, Integer.parseInt (port));
i = new DataInputStream (new BufferedInputStream (s.getInputStream ()));
o = new DataOutputStream (new BufferedOutputStream (s.getOutputStream ()));
output.appendText (" connected.\n");
input.setEditable (true);
input.requestFocus ();
execute ();
} catch (IOException ex) {
ByteArrayOutputStream out = new ByteArrayOutputStream ();
ex.printStackTrace (new PrintStream (out));
output.appendText ("\n" + out);
}
}
public void execute () {
try {
while (true) {
String line = i.readUTF ();
output.appendText (line + "\n");
}
} catch (IOException ex) {
ByteArrayOutputStream out = new ByteArrayOutputStream ();
ex.printStackTrace (new PrintStream (out));
output.appendText (out.toString ());
} finally {
listener = null;
input.hide ();
validate ();
try {
o.close ();
} catch (IOException ex) {
ex.printStackTrace ();
}
}
}
public boolean handleEvent (Event e) {
if ((e.target == input) && (e.id == Event.ACTION_EVENT)) {
try {
o.writeUTF ((String) e.arg);
o.flush ();
} catch (IOException ex) {
ex.printStackTrace();
listener.stop ();
}
input.setText ("");
return true;
} else if ((e.target == this) && (e.id == Event.WINDOW_DESTROY)) {
if (listener != null)
listener.stop ();
hide ();
return true;
}
return super.handleEvent (e);
}
}
make a chat room for your web page.
Making an xat.com chat box is easy and completely free. Just choose a background and
size, press the Update button and copy and paste the code from the box below into your
web page, MySpace or blog. MySpace users click here. Facebook users click here. To make
a chat group click here.
Principio del formulario
New chat 0 1 http://w w w .xat.c

Click a picture below to change the background:


Final del formulario
http://www.xat.com/web_gear/?cb

solo inserter el codigo embebido q seria:

<embed src="http://www.xatech.com/web_gear/chat/chat.swf" quality="high"


width="540" height="405" name="chat" FlashVars="id=134047251"
align="middle" allowScriptAccess="sameDomain" type="application/x-
shockwave-flash" pluginspage="http://xat.com/update_flash.shtml"
/><br><small><a target="_BLANK" href="http://xat.com/web_gear/?cb">Get
your own Chat Box!</a> <a target="_BLANK"
href="http://xat.com/web_gear/chat/go_large.php?id=134047251">Go Large!
</a></small><br>

http://myinfochat.eliveengine.com/myinfo
chat/servlet/infolet.InfoServlet
<!--$#-- begin secure instant messaging chat server software
http://www.12planet.com YOU SHOULD NOT MODIFY THE HTML CODE EXCEPT
FOR THE APPLET PARAMETERS-------------->

<center>

<script language="JavaScript" type="text/javascript">

var chatheight = 500;

var chatwidth = 600;


var chatskin = "std"; //replace "std" by "skin" for skin based interface mode

var chatskinID ="mac"; //select the skin "mac" (supported values are basic,
future, mac, organizer, palm, skycloud, skynight), should set chatskin="skin"
first

var chatskinPopupH = "405"; //for the skin mode only, private chat popup
height

var chatskinPopupW = "367"; //for the skin mode only, private chat popup
width

</script>

<script language="JavaScript"
SRC="http://www.myinfochat.com/myinfochat/profile/myinfochat_top.js"></scr
ipt>

<PARAM NAME="sessionFilterWords" VALUE="fuck;shit;asshole">

<PARAM NAME="sessionlanguage" VALUE="spanish">

<PARAM NAME="sessiongroupvalue" VALUE="science">

<PARAM NAME="sessionOnloginSound" VALUE="ring.au">

<PARAM NAME="sessionOnpagerSound" VALUE="beeper.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">


<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.12planet.com">secure instant messaging chat


software</a>

<a href="http://www.myinfochat.com">powered by myInfoChat.com

</a>

</font>

<br>

<br>

<script language=javascript>

function doJoin(a,b)

top.frames.infochatapplet.document.applets.chatapplet.doJoin(a,b);

function openwindow(page,target,a_width,a_height)
{ window.open(page,target,'toolbar=no,location=no,directories=no,status=no,
menubar=no,resizable=yes,copyhistory=no,scrollbars=yes,width=a_width,hei
ght=a_height');

function BtSave()

myWindow = window.open('','displayWindow');

myWindow.document.write("1- Type Ctrl+A");

myWindow.document.write(" <br>");

myWindow.document.write("2- Type Ctrl+C");

myWindow.document.write(" <br>");

myWindow.document.write("3- Paste into your document");

myWindow.document.write(" <br>");

myWindow.document.write(" <br>");

myWindow.document.write(document.applets.chatapplet.getChatLog());

</script>

<form>

<input type="button" name="btIcons" value="Icons"


onClick="openwindow('http://www.infochat.com/www/icon/icons.html','win1',50
0,200)">

<input type="button" name="btSave" value="Save chat-transcript"


onClick="BtSave()">

</form>
</center>

<!--$#-- end free java chat room h<a href="http://www.infochat.com"


-------------->

Chat en Java usando Hilos y Sockets


Posted: 16 marzo 2008 by Valsrock in Algoritmos, Java, Programacion
Etiquetas: Java

86

i
6 Votes

Con la finalidad de aplicar nuestros conocimientos acerca de Modelos de


Lenguajes de Programación, hemos desarrollado un Chat. La aplicación
llamada JavaChat ha sido implementada en Java por ser este un lenguaje
orientado a objetos,ademas por la facilidad para implementar Sockets e Hilos
,técnicas empleadas en este aplicación.

Ventana cliente
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.com .
Espero sus mails .Salu2

Javachat: Idea del Proyecto


La implementación del programa servidor sigue las siguientes ideas:

1. Se inicia el servidor
2. El servidor se mantiene escuchando cualquier petición de un cliente para
conectarse.
3. El servidor acepta al cliente.
4. El servidor lanza un hilo de comunicación con el cliente.
5. Por el hilo se envían y reciben mensajes a través del servidor entre todos
los clientes.
6. Si el cliente cierra la comunicación el hilo se rompe y se corta la
comunicación con ese cliente.
La implementación del programa cliente sigue las siguientes ideas:
1. Se inicia el cliente
2. El cliente lanza una petición al servidor para conectarse
3. El servidor asigna un hilo al cliente al ser aceptado.
4. El cliente envía y recibe mensajes por el hilo hacia todos o hacia algun
usuario específico, usando al servidor como puente para las
comunicaciones.
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.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. Esta característica de interconectividad entre máquinas hace que el
concepto de socket nos sirva de gran utilidad.

Hilos: Un hilo es un flujo de ejecución de código, y mediante hilos, podemos


hacer que nuestros programas aparentemente realicen varias tareas al mismo
tiempo.Por ejemplo, un código podría interaccionar con el usuario mientras
realiza tareas de segundo plano de gran consumo de tiempo.Los hilos
separados realmente no se ejecutan al mismo tiempo(a menos que se tenga
una maquina multiprocesador); en realidad cada hilo obtiene secuencias de
tiempo del mismo procesador.Ayuda para la aplicación: Siga los siguientes
pasos:

1. Inicie el IDE Netbeans


2. Abra el proyecto
3. Ejecute la el archivo servidor.java
4. Ejecute cuantas veces desee el archivo VentCliente.java
5. Ingrese “localhost” si los clientes se ejecutan sobre una misma PC.
6. Ingrese un nick, con el que sera identificado.
7. En la ventana que le aparece Ud. podrá conversar con todos a la vez.
8. Para conversar en privado con un solo contacto, elija en la lista de
contactos a un usuario y luego pulse el botón privado.
9. A continuación le aparecerá una ventana mas pequeña en la que podrá
comunicarse solo con su contacto.
10.Para salir simplemente cierre la ventana y el cliente se desconectará
automáticamente.
Aqui dejo los link para que prueben este proyecto:

Anda mungkin juga menyukai