Foros del Web » Programación para mayores de 30 ;) » Java »

Que necesito Leer para hacer un chat

Estas en el tema de Que necesito Leer para hacer un chat en el foro de Java en Foros del Web. Hola a todos tengo conocimientos en java, pero para hacer un chat tengo entendido que tendría que profundizar en unas clases en particular. ¿que clases ...
  #1 (permalink)  
Antiguo 20/12/2010, 19:20
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Que necesito Leer para hacer un chat

Hola a todos tengo conocimientos en java, pero para hacer un chat tengo entendido que tendría que profundizar en unas clases en particular.

¿que clases debo profundizar?
¿que libro me recomiendan?
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #2 (permalink)  
Antiguo 20/12/2010, 19:59
 
Fecha de Ingreso: julio-2009
Mensajes: 22
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Que necesito Leer para hacer un chat

Busca algo de info sobre Sockets, yo hice un chat en C usando Sockets supongo que en Java debe ser mas fácil o por lo menos debe haber mucha más documentación.

Algunos links:
http://mundogeek.net/archivos/2006/03/20/sockets-en-java/
http://www.chuidiang.com/java/sockets/socket.php

Primero te convendría leer algo acerca de Sockets, qué son y para qué te pueden servir. Después de haber entendido como funcionan metete con la api de Java.

Saludos y suerte!!
  #3 (permalink)  
Antiguo 21/12/2010, 02:05
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 3 meses
Puntos: 188
Respuesta: Que necesito Leer para hacer un chat

Yo hice uno simple en c# utilizando arrays para controlar los usuarios, las conversaciones y se actualizaba cada 5 o 10 segundos, etc... Creaba canales como frames separados y cuando el array superaba cierto tamaño se iban borrando las conversaciones anteriores.

Todo dependerá de lo que quieras. Si puedes pillarte las sources de una aplicación de chat, entenderlas y luego transformar eso en lo que tu quieres te sería más rápido que ir punto a punto.
  #4 (permalink)  
Antiguo 21/12/2010, 10:35
 
Fecha de Ingreso: octubre-2010
Mensajes: 27
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Que necesito Leer para hacer un chat

Hola calichecal,

Una vez hice un Chat, el servidor estaba en Java java dooo (Linux) y el cliente en Delphi (Windows).

Y bueno como el conocimiento es compartir ahi va el código, si lo mejoras te lo agradeceria, cualquier cosa estoy en [email protected].

Saludos

Manuel

Clase: ServidorChat.java
public class ServidorChat extends javax.servlet.http.HttpServlet{
static{
(new Servidor()).start();
}
}
class Servidor extends Thread{
public void run(){
try{
List clientes=new Vector();
ServerSocket serverSocket = null;
boolean listening=true;

serverSocket = new ServerSocket(4444);

System.out.println("-- Iniciado el servidor de chat" );
//int sg=0;
while (listening){
//System.out.println("sg: "+sg++);
ThreadServer cliente=null;
clientes.add( cliente=new ThreadServer(serverSocket.accept(),clientes));
cliente.start();
}

serverSocket.close();
}catch(Exception ex){
System.err.println("["+(new java.util.Date(System.currentTimeMillis()))+"]"+ex.getMessage());
ex.printStackTrace();
}
}
}

Clase: ThreadServer.java
public class ThreadServer extends Thread{
private Socket socket = null;
private java.util.List lista=null;
private String usuario;
private PrintWriter out;
private BufferedReader in;
private String grupo,sql;
private Conexion con=new Conexion();
public void run() {

try {
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));

String inputLine, outputLine;
//recibiendo información del usuario

while ((inputLine = in.readLine()) != null) {
System.out.println("Valor enviado por el Cliente: "+inputLine);

StringTokenizer st=new StringTokenizer(inputLine,";");
while (st.hasMoreTokens()){
String fUsuario=st.nextToken();
StringTokenizer st0=new StringTokenizer(fUsuario,":");
String t=st0.nextToken();
if (t.equalsIgnoreCase("usuario"))
this.usuario=st0.nextToken();
else if (t.equalsIgnoreCase("grupo"))
this.grupo=st0.nextToken();

}
break;
}
//verificando que no se repita el usuario, si existe, sacarlo de la lista.
for(Iterator i=lista.iterator();i.hasNext();){
ThreadServer thread=(ThreadServer)i.next();
if (thread.getUsuario().equals(this.usuario) && !thread.equals(this)){
thread.destroy();
break;
}
}

//enviando la lista de usuarios conectados;
String usuarios="";
for(Iterator i=lista.iterator();i.hasNext();){
ThreadServer thread=(ThreadServer)i.next();
if (thread.getGrupo().equalsIgnoreCase(this.grupo))
usuarios+=thread.getUsuario()+",";
}
out.println("%%getList,"+usuarios);

//notificar a los demás que entró un nuevo usuario
java.util.Date hora=new java.util.Date(System.currentTimeMillis());
for(Iterator i=lista.iterator();i.hasNext();){
ThreadServer thread=(ThreadServer)i.next();
if (thread.getGrupo().equalsIgnoreCase(this.grupo) && !thread.getUsuario().equalsIgnoreCase(usuario)){
thread.escribir("%%addUser,"+usuario);

thread.escribir("** ["+hora+"] "+usuario+" acaba de ingresar **");
}
}

boolean salir=false;

this.escribir(" ** Bienvenido a la sala de conversación ** ");

while ((inputLine = in.readLine()) != null && !(salir=inputLine.equals("/q"))) {
for(Iterator i=lista.iterator();i.hasNext();){
ThreadServer thread=(ThreadServer)i.next();
String sGrupo = thread.getGrupo();
String sUsuario = thread.getUsuario();
if (thread.getGrupo().equalsIgnoreCase(grupo))
if (inputLine.startsWith("%%"))
thread.escribir(inputLine);
else
thread.escribir(usuario,inputLine,sGrupo,sUsuario, socket.getInetAddress().getHostAddress());
}

}


} catch (IOException e) {
e.printStackTrace();

}catch(NullPointerException e){
System.out.println("--Error de usuario entrante ("+socket.getInetAddress().getHostAddress()+"). . desconectándolo");
}

this.destroy();
}
public ThreadServer(Socket socket, java.util.List lista) {
super("ThreadServer"); //TheardServer
this.socket = socket;
this.lista=lista;
System.out.println("["+(new java.util.Date(System.currentTimeMillis()))+"]--Hay una nueva conexion");
mostrarEstadoConexiones();
}
void mostrarEstadoConexiones(){
System.out.println( "("+lista.size()+" conexiones activas)");
}
protected void escribir(String remitente,String texto,String grupo, String usua, String ipRemitente) {
out.println(remitente+" >"+texto);
//aquí se va a grabar todos los datos
if (!usua.equalsIgnoreCase(remitente)){
sql = "insert into mensajechat (sala,usuarioOrigen,usuarioDestino,mensaje, fecha,publico, hostOrigen,hostDestino) values (\""+grupo+"\",\""+remitente+"\",\""+usua+"\",\""+ texto+"\",now(),\"S\",\""+ipRemitente+"\",'"+socke t.getInetAddress().getHostAddress()+"')";
sql = sql.replace('\"','\'');
java.sql.ResultSet rs = con.executeQuery(sql);
}
}
protected void escribir(String texto){
out.println(texto);
}
public void destroy() {
try{
java.util.Date hora=new java.util.Date(System.currentTimeMillis());
if (lista.remove(this)){
this.escribir(" ** Ha dejado la sala de conversación ** ");
for(Iterator i=this.lista.iterator();i.hasNext();){
ThreadServer thread=(ThreadServer)i.next();
if (this.grupo.equalsIgnoreCase(thread.grupo)){
thread.escribir("** ["+hora+"] "+usuario+" ha dejado la sala **");
thread.escribir("%%exitUser,"+this.usuario);
}
}
out.close();
in.close();
socket.close();
System.out.println("["+(new java.util.Date(System.currentTimeMillis()))+"]--Finalizando "+this.usuario);
mostrarEstadoConexiones();
}
}catch(java.io.IOException ex){
ex.printStackTrace();
}
}
public String getUsuario() {
return usuario;
}
public String getGrupo() {
return grupo;
}
}

Clase: TestServidorChat.java
public class TestServidorChat {
public static void main(String[] args) {
(new Servidor()).start();
}
}

Saludos

Manuel

Etiquetas: chat
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:55.