Existe una necesidad urgente de un programa de chat escrito en lenguaje Java
Paquete de sala de chat;
Importar Java.awt.*;
Importar Java.awt.event.*;
Importar Java .net *;
Importar Java .io *;
Importar javax .
El cliente de clase pública extiende JFrame. , Ejecutable{
Conexión JPanel, texto, enviar;
Nombre JLabel, enviar a
lista JComboBox;
Configuración JButton, snd, claro
JTextArea habla
JTextField quién, digamos;
JScrollPane jsp
Cliente de socket;
InputStream es ;
OutputStream os
PrintStream ps
BufferedReader br
Recepción de cadena, usted dice
Subproceso th;
DataInputStream dis
doble tof
client()
{
super("Cliente de sala de chat")
this.setSize(800, 600);
this .setresizable(false);
conn = nuevo JPanel(); p>texto = nuevo JPanel();
enviar = nuevo JPanel();
this.getContentPane(). Agregar (conexión);
conn.setBounds(0, 0, this.getWidth(), 50
nombre = new JLabel(" nombre:
quién = nuevo JTextField();
con = nuevo JButton(" conexión ");
conn.setLayout(vacío);
conn .add(nombre);
nombre.setBounds(30, 10, 50, 25);
conn.add(QUIÉN
quién .setBounds); (80, 10, 150, 25);
conn .
con.setBounds(250, 10, 60, 25); >this.getContentPane(). Agregar(texto);
text.setBounds(0, 50, this.getWidth(), 450);
texto establecer diseño(new BorderLayout());
JSP = nuevo JScrollPane();
hablar = nuevo JTextArea();
jsp.getViewport().
establecer vista(hablar);
text.add(jsp, "Centro");
hablar setline wrap(true); ). Agregar(enviar);
enviar.set diseño(null);
enviar.setBounds(0, 480, this.getWidth(), 150);
Enviar a = new JLabel(" Enviar a: ");
snd = new JButton(" enviar ");
list = new JComboBox(); p>say = new JTextField();
clear = new JButton(" vacío ");
enviar agregar(enviar a);
enviar a. setBounds(30, 525, 50, 25);
enviar.add(lista
list.setBounds(100, 525, 75, 25); p>enviar.add(decir);
decir establecer editable(verdadero);
decir.setBounds(200, 525, 300, 25); >enviar.add(snd);
snd.setBounds(520, 525, 100, 25);
enviar.add(clear);
clear .setBounds(650, 525, 100, 25);
este .setdefaultcloseoperative(JFrame.EXIT_ON_CLOSE);
este .set visible(true);
con.addActionListener(this);
snd . addactionlistener(this);
}
acción de anulación pública realizada (evento de acción AE){
if(AE.getactioncommand().
es igual("conexión"))
{
prueba
{
cliente = nuevo Socket(dirección inet. getlocalhost(), 55555);
Talk.append("Conexión exitosa...\ n ");
con settext(" desconectar ");
es =. cliente . getinputstream();
OS = cliente . obtener flujo de salida();
th = nuevo hilo
identificador de cadena = quién . gettext();
byte b[]= id . getbytes();
flujo de salida de datos dos = nuevo flujo de salida de datos (SO);
int len = b.longitud
dos .escribir int(len);
dos .escribir
th . >
}catch(Exception e){talk.append("Error de conexión\ n " e . tostring() " 0000 ");}
}
else if( ae.getSource()==snd)
{
if (list.getselecteditem().tostring () == "todos")
{
yousay = " @ open " say . gettext();
byte b[]= getbytes()
flujo de salida de datos dos = nuevos datos. flujo de salida (OS);
Pruebe {
int len = b.length
dos . p> dos . escribir(b);
}catch(excepción e)
{
sistema fuera . ") ;
}
}
Otros
{
yousay = " @ susurro " dice . gettext( );
byte b[]= dices . getbytes();
byte w[]=list.getSelectedItem(). toString().
getBytes();
flujo de salida de datos dos = nuevo flujo de salida de datos (SO);
Pruebe {
int len = b.length p>
int wlen = w.length
dos .escribir int(len); //contenido
dos . dos . escribir int(wlen); //Enviar objeto
dos .
}catch(Exception e)
{
sistema . print(e . tostring() " AAAA "
}
}
}
Elseif (AE.getactioncommand().equal("disconnect"))
{
intenta
{
cliente cerrar. ( );
Talk.append("La conexión se ha desconectado\ n ");
con . (Excepción e){ system . println(e . tostring() " 2222 " }
}
}
Public void run(); p>
{
mientras(verdadero)
{
intenta
{
dis = Nuevo flujo de entrada de datos (es);
tof = dis read double();
if(tof==1.1)
{
dis = nuevo flujo de entrada de datos (es);
int número;
list . removeallitems();
list . cada uno ");
número = dis . readint();
for(int I = 0; i lt número; i )
{ p>
int len = dis . readint();
byte b[] = nuevo byte [len]; p>
Nombre de cadena=nueva cadena(b);
list.addItem(nombre);
}
}
else if(tof==2.2)
{
try
{
dis = nuevo flujo de entrada de datos (is);
int len = dis . readint();
byte b[]=nuevo byte[len];
dis read(b);
p>
recibir = nueva cadena(b);
hablar . ) {jooptionpanel. Mostrar cuadro de diálogo de mensaje (esto, "La conexión se ha desconectado", "mensaje", jooptionpane.
message_message); break; }
}
} catch(Excepción e) {jooptionpane. show messagedialog(this, "La conexión se ha interrumpido", "mensaje", jooptionpane.info_message break); void main(String[] args) {
cliente cl = nuevo cliente();
}
}
Servidor:
Paquete de sala de chat;
Importar Java.awt.*;
Importar javax.swing.*;
Importar Java net. *;
Importar Java . util . vector;
Importar Java .io *
El servidor de clase pública extiende JFrame para implementar Runnable.
JPanel jp 1;
JTextArea jta
JScrollPane jsp
Socket socket = null
Servidor ServerSocket;
p>
InputStream es;
Os OutputStream
static int i=0, inicio de sesión;
int número;
Cadena estática s =
Hilo Sr;
Hilo th[]=nuevo hilo[20];
Vector estático ol = nuevo Vector();
p>
byte público estático w[] = null;
cadena estática en "" //nombre
cadena estática a = "" ;
p>
Cadena estática en texto= " " "; //contenido
Cadena estática en texto =
Servidor()
{
Super("Servidor de sala de chat");
this.getContentPane() establece el diseño (nuevo GridLayout(1, 1));
<. p>this.setSize (400, 300);jp 1 = nuevo JPanel();
JTA = nuevo JTextArea();
JSP = nuevo JScrollPane();
this.getContentPane().Add(jp 1);
jp1.setLayout(new GridLayout(1, 1));
jsp.getViewport(). setView(JTA);
jp 1. add(JSP);
this.
EXIT _ ON _ CLOSE);
set visible(true);
}
Public static void main(String[] args) {
servidor Sr = nuevo servidor();
sr.sr = nuevo hilo (Sr);
Sr. start();
sendtoall sta = nuevo sendtoall();
regreso desde RF = nuevo regreso desde(Sr);
regreso a rt = nuevo regreso a(Sr);
sta . inicio();
RF .vacío público. Ejecutar()
{
Probar
{
servidor = nuevo socket de servidor(55555);
while(verdadero)
{
socket = servidor . aceptar();
es = socket
datos. inputstream dis = nuevos datos inputstream(is);
int len = readint();
byte b[]=nuevo byte[len];
dis.read(b);
ID de cadena = nueva cadena(b);
Registro v = nuevo registro(id, socket);
ol . agregar elemento(v);
for(int I = 0; iltol . size(); i )
{
if ( ol. elementAt(i).Equal(v))
{
no = I;
}
}
iniciar sesión = 1;
S=id "¡Ya ven a la sala de chat!";
th[no]=nuevo hilo (nuevo recibir(esto, no)) ;
th[no]. start();
}
} catch(Excepción e){ system out . println(e . tostring() " AAAA "); }
}
La clase recibe e implementa Runnable
{
InputStream es;
OutputStream os
Solicitud de servicio del servidor;
Socket sk
int I;
Nombre de cadena;
IP de cadena;
Recibir (servidor sr, int i)
{
this.sr = sr
this.i = i
sk=((registro)sr.ol.elementAt(i)). IP;
nombre =((registro)Sr . ol . elemento en(I)).
Nombre;
IP =((registro)Sr . ol . elemento en(I) dirección IP(). toString();
}
Ejecución de vacío público()
{
mientras (verdadero)
{
Probar
{
is = sk . getinputstream();
datos inputstream dis = nuevos datos inputstream(is);
int len = dis . readint();
byte b[]=nuevo byte[len]
dis .
Cadena abc = nueva cadena (b);
Sr . . igual(" @open "))
{
servidor s = nombre "[" IP subcadena(1, IP . longitud()) "]" " Diga: " ABC . subcadena(5, ABC . longitud());
Sr append(servidor . s "\ n "); de lo contrario si (abc.substring (0, 8)). igual("@whisper"))
{
int wlen = dis .readint();
sr.w = newbyte[wlen]; p>
dis . read(Sr . w);
servidor.to = nueva cadena (Sr . w);
servidor de =((registro )Sr . ol. elemento en (I)). Nombre;
cadena IP =((registro)Sr . ol . elemento en(I) dirección IP(). toString();
//servidor s = servidor desde el servidor "Sí" a "[" IP . substring(8, ABC . length());
Server.fromtext= "Le susurraste" al servidor.
to "[" ip.substring (1, IP.length()) "]" ";
servidor.totext=servidor. from "["IP.substring(1, ip.length()) "]" "Te susurro: " abc.substring(8,ABC.length());
Sr.JTA.append(server.s "\n");
}
}catch(Exception e)
{
Intenta
{
flujo de salida de datos dos = nuevo flujo de salida de datos (SO);
server ol . removeelementat(I);
Server.s=name "ha abandonado la sala de chat. ;
iniciar sesión en el servidor = 1;
Romper;
}catch(Exception f){}
}
}
}
}
La clase sendtoall extiende el hilo
{
int len, número
Byte b[];
Solicitud de servicio del servidor;
Socket ST;
Os OutputStream
DataOutputStream dos
Ejecución de vacío público()
{
mientras (verdadero)
{
Pruebe
{
if(server.login==1)
{
número = 0;
número = servidor . ol tamaño();
dos = nuevo flujo de salida de datos (OS
for(int I = 0; i ltserver . ol . tamaño(); )
{
st=((registro)sr.ol.elementAt(i)). IP;
OS = ST . obtener flujo de salida();
dos = nuevo flujo de salida de datos (OS)
dos . ;
dos.writeInt(número);
for(int j = 0; j lt número; j )
{
nombre de cadena =((registro)Sr . ol . elemento en(j)).
nombre;
byte b[]= nombre . getbytes();
int len = b.length
dos .
int len = b.longitud
dos .write int(len);
p>
dos . /p>
}
}
servidor . iniciar sesión = 0;
}
else if(!servidor. s . equals(" " amp; ampSr . ol . size() >0)
{
b = servidor . // Caracteres chinos de tipo cadena ocupa un byte y los caracteres chinos de tipo byte ocupan dos bytes
len = b.length
//len s .
//b = nuevos bytes [len];
//b = servidor . getbytes();
for(int I = 0; i ltserver . ol . tamaño(); i )
{
st=((registro)sr.ol.elementAt(i) ).
IP;
OS = ST . obtener flujo de salida();
flujo de salida de datos dos = nuevo flujo de salida de datos (OS) . (2.2);
dos .escribir int(len);
dos .escribir
}
servidor. s =
}
} catch(Excepción e){ sistema fuera . println(e . tostring() " sdasd "); /p>
}
}
La clase regresa del hilo de extensión
{
int len, wlen
Byte b[];
Byte w[];
Solicitud de servicio del servidor;
Socket ST;
Os OutputStream
DataOutputStream dos
//String from= " ", to =
returnfrom(server sr)
{ p>
this.sr = sr
}
Ejecución de vacío público()
{
mientras (verdadero)
{
if (!server.fromtext.equals(" ")
{
b = servidor . de texto . getbytes( );
len = b.length
Sr . append(Sr . del texto);
Pruebe
{
for(int I = 0;iltserver . ol . size();i )
{
if((record)Sr . ol . elemento en (I) ). nombre es igual(servidor. de))
{
st=((registro)sr.ol.elementAt(i)).
IP;
OS = ST . obtener flujo de salida();
flujo de salida de datos dos = nuevo flujo de salida de datos (OS) . (2.2);
dos .escribir int(len);
dos
}
}<. /p>
} catch(Excepción e){ system . println(e . tostring() " wwww "); from =
}
}
}
}
La clase regresa al hilo de extensión p>
{
int len, wlen
byte b[];
byte w[]; Solicitud;
OS OutputStream
Os OutputStream
DataOutputStream dos
//String from= " ", to =
Volver a (Solicitud de servicio del servidor)
{
this.sr = sr
}
Ejecución de anulación pública ()
{
mientras(verdadero)
{
si (!server.totext.equals(" ")
{
w = servidor . totext . getbytes();
wlen = w.length
Probar
{
for(int I = 0; i ltserver . ol . size(); i )
{
if((record)Sr . ol . elemento en (I)). nombre es igual a(servidor. a))
{
st=((record)sr.ol.elementAt(i)).
IP;
OS = ST . obtener flujo de salida();
flujo de salida de datos dos = nuevo flujo de salida de datos (OS) . (2.2);
dos .escribir int(wlen);
dos .
}
}<. /p>
} catch(Excepción e){ system . println(e . tostring() " wwww "); a =
}
}
}
}
Registros de clase
{
Nombre de cadena;
IP del socket;
Registro (id de cadena, socket)
{
nombre = id
ip =socket;
}
}
Aprendido antes Escrito en java. Es una sala de chat en línea que solo tiene chats grupales, chats privados y mensajes en línea y fuera de línea. Puede haber errores allí; agregue otras funciones usted mismo. La función que deseas es realmente buena y poderosa.