Red de conocimiento informático - Conocimiento del nombre de dominio - Existe una necesidad urgente de un programa de chat escrito en lenguaje Java

Existe una necesidad urgente de un programa de chat escrito en lenguaje Java

Cliente:

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

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();

{

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 )

{

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)

{

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

{

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.