Código fuente del paquete Javautil
//Código del servidor,
Mensaje de empaquetado
Importar Java io
Importar Java. . net.*;
Importar Java.util.*;
Servidor de clase pública {
Public static void main(String[] args) lanza una excepción {
System.out.print("Servidor");
socket del servidor = nuevo socket del servidor(8888);
Vector v = nuevo vector()
while(true){
socket sk = socket . aceptar();
flujo de entrada de datos en = nuevo flujo de datos (sk . getinputstream())
flujo de salida de datos = nuevo flujo de salida de datos(sk . get flujo de salida()); hilo (pulg,v).
start();
}
}
}
//Código ServerThread.java
Mensaje del paquete ;
Importar Java .net *; La clase pública ServerThread extiende el subproceso {
DataInputStream en
Vector todo;
Subproceso del servidor público (DataInputStream en, Vector v){
this.in = en
this . all = v;
}
Public void run()
{
mientras(verdadero)
{
prueba{
cadena s 1 = en . (int I = 0; i & ltall . size(); i++)
{
objeto obj = all get(I);
Socket Socket. =(Socket)obj;
flujo de salida de datos = nuevo flujo de salida de datos(socket. get flujo de salida());
escribir utf(s 1);
salida. p>
p>
System.out.print(1);
out .flush();
}
System.out .print("¡Mensaje enviado! ");
} catch(Exception e){ e . printstacktrace();};
}
} p>
}
//Código ClientFrame.java
Mensaje del paquete;
Importar Java.awt.*;
Importar Java.awt *;
Importar Javax .
La clase pública ClientFrame extiende JFrame para implementar ActionListener{
JButton b 1 = new JButton(" SendMessage ");
JButton b2 = new JButton(" Servidor vinculado");
JTextField t 1 = nuevo JTextField(20);
JTextField T2 = nuevo JTextField(20);
JLabel l=nuevo JLabel ("Ingrese el nombre del servidor :");
Área JTextArea = new JTextArea(10,20);
JPanel p 1 = new JPanel();
JPanel p2 = nuevo JPanel ();
JPanel P3 = nuevo JPanel();
JPanel P4 = nuevo JPanel();
Zócalo; p>
public ClientFrame()
{
this.getContentPane().
agregar(p 1);
p2.add(new JScrollPane(área));
P3 . b 1);
P4 .añadir(l);
P4 .
p2 . establecer diseño (nuevo diseño de flujo());
P3 . establecer diseño (nuevo diseño de flujo()); );
p 1. establecer el diseño(new BorderLayout());
p1.add("Norte", p2);
p1.add( "Centro", P3);
p1.add("Sur", P4);
b 1. addactionlistener(this);
B2. (this);
this . pack();
show();
}
Operación de anulación pública realizada (evento de operación). e)
{
if(e.getActionCommand().equals("Servidor vinculado"))
{
prueba {
socket=new Socket(t2.getText(), 8888);
B2 .set enable(false);
joptionpane . Conexión exitosa");
flujo de entrada de datos en = nuevo flujo de entrada de datos(socket . getinputstream());
Nuevo hilo de cliente (en, área). start();
}
catch(Exception e1){
joptionpane . showmessagedialog(this, "Error de conexión"); >e 1. printstacktrace();};
}
else if(e.getActionCommand().
igual("SendMessage "))
{
Pruebe {
flujo de salida de datos = nuevo flujo de salida de datos(socket . get flujo de salida());
escribir utf(t 1 . gettext());
t 1 . settext(" "); { y 1. printstacktrace();};
}
}
}
//Código ClientThread.java
Mensaje del paquete;
Importar Java.net.*;
Importar Java.io.*;
Importar javax.swing.*;
Clase pública ClientThread extiende el hilo {
DataInputStream en
área JTextArea;
hilo de cliente público (flujo de entrada de datos en, área JTextArea){
this.in = in
this.area = area
}
Ejecución de vacío público()
{
while(true){
Prueba{
string s = in .
}
catch(Excepción e){ e . printstacktrace();};
}
}
<. p>}//Código Client.java
Mensaje del paquete;
Cliente de clase pública{
/** p >
* @param args
*/
Public static void main(String[] args) {
nuevo marco de cliente(); p>
}
}
//Cada fragmento de código es una clase, así que no lo coloque en un archivo. Ejecute Cliente.java.
¡Buena suerte!