Escribir un programa java
¿Es este el caso? En el extremo izquierdo está la ventana de respuesta del servidor, en el medio está el servidor que monitorea a las personas del chat y la lista vinculada almacena las personas que ingresan. A la derecha está el envío del chat del cliente. ventana de mensaje. Si envía un mensaje desde la derecha, el servidor puede aceptarlo y, como se muestra a la izquierda, el servidor de la izquierda también puede responder mensajes al cliente.
Código de cliente:
importar java.io.*;
importar java.net.*;
importar java.awt. *;
importar java.awt.event.*;
importar javax.swing.*;
importar javax.swing.JButton;
ChatClient de clase pública extiende JFrame
{
privado estático final largo serialVersionUID = 1L;
JTextArea ta = new JTextArea("Puedes pasar este Cliente chat grupal!" + "\n" + "¿Enviar tecla de acceso directo? ALT+ENTER \n");
TextArea tf = new TextArea(3, 21);
JButton btn = new JButton("Enviar");
JPanel jp = new JPanel();
Socket s = null;
public ChatClient() lanza una excepción
{ ?this.setLayout(new BorderLayout(10, 10)); ?this.add(ta, BorderLayout.CENTER); ?jp.add(btn, BorderLayout.SOUTH); tf, BorderLayout.SOUTH); ?this.add(jp, BorderLayout.EAST); ?btn.addActionListener(new ActionListener() ?{ ?public void actionPerformed(ActionEvent ae) ?{ ?try ?{ ?String sSend = tf. getText(); ?if (sSend.trim().length() == 0) ?return; ?ChatClient.this.send(sSend); ?tf.setText(""); hágalo usted mismo:" + "\n"); ?ta.append(sSend + "\n"); ?} ?catch (Exception e) ?{ ?e.printStackTrace(); ?} ?} ?}); ? btn.setMnemonic(KeyEvent.VK_ENTER); ?this.addWindowListener(new WindowAdapter() ?{ ?public void windowClosing(WindowEvent e) ?{ ?System.exit(0); ?} ?}); , 400, 500); ?setVisible(verdadero); ?tf.requestFocus(); ?intenta ?{ ?s = nuevo
cket("localhost", 8888); ?} ?catch (Excepción e) ?{ ?ta.append("¡Lo siento! No se puede conectar con el servidor" + "\n"); ()) ).start();
}
public void send(String str) lanza una excepción
{ ?DataOutputStream dos = new DataOutputStream(s. getOutputStream() ); ?dos.writeUTF(str);
}
public void desconectar() lanza una excepción
{ ?s.close();
}
public static void main(String[] args) lanza una excepción
{ ?JFrame.setDefaultLookAndFeelDecoated(true); ?BufferedReader br = new BufferedReader( nuevo InputStreamReader (System.in)); enviar(str ); ?str = br.readLine(); ?} ?cc.disconnect();
}
clase ReceiverThread implementa Runnable
{ ?public void run() ?{ ?if (s == null) ?return; ?intenta ?{ ?DataInputStream dis = new DataInputStream(s.getInputStream()); ?String str = dis.readUTF(); str != null && str.length() != 0) ?{ ?ChatClient.this.ta.append(str + "\n"); ?str = dis.readUTF(); e) ? { ?e.printStackTrace(); ?} ?}
}
}
Código de servidor:
importar java .awt .BorderLayout;
importar java.awt.Button;
importar java.awt.Frame;
importar java.awt.TextArea;
importar java.awt.event.ActionEvent;
importar
java.awt.event.ActionListener;
importar java.awt.event.WindowAdapter;
importar java.awt.event.WindowEvent;
importar java. io.DataInputStream;
importar java.io.DataOutputStream;
importar java.io.IOException;
importar java.net.ServerSocket;
importar java.net.Socket;
importar java.util.ArrayList;
importar java.util.Collection;
importar java.util. Iterador;
importar javax.swing.JFrame;
importar javax.swing.JTextArea;
La clase pública ChatServer extiende JFrame
{
privado estático final largo serialVersionUID = 1L;
JTextArea ta = new JTextArea();
ServerSocket server = null;
Colección
public ChatServer(puerto int) lanza una excepción
{ ?server = new ServerSocket(puerto); BorderLayout.CENTER); ?setBounds(200, 200, 300, 450); ?this.addWindowListener(new WindowAdapter() ?{ ?public void windowClosing(WindowEvent e) ?{ ?System.exit(0); ?} ?} ); ?setVisible(true);
}
public void startServer() lanza una excepción
{ ? while (true) ?{ ?Socket s = servidor .accept(); ?cClient.add(new ClientConn(s)); ?ta.append(s.getInetAddress().getHostName() + "Introducir" + " " + "Número de puerto" ?+ s.getPort() ?ta.append("\n" + "El número total actual de personas al frente: " + cClient.size() + "\n\n"); p>
@SuppressWarnings("serial")
clase ClientConn extiende Frame implementa Runnable, Acti
onListener
{ ?TextArea ta1 = nulo; ?TextArea ta2 = nulo ?Botón btn = nulo ?Socket s = nulo ?public ClientConn(Socket s) ?{ ?ta1 = nuevo TextArea(3, 30); ?ta2 = new TextArea(2, 15); ?btn = nuevo Botón("Enviar"); ?this.setLayout(new BorderLayout()); ?this.add(ta1, BorderLayout.CENTER); .add(ta2, BorderLayout.SOUTH); ?this.add(btn, BorderLayout.EAST); ?this.setSize(300, 200); ?this.setVisible(true); getInetAddress().getHostName() + "puerto" ?+ s.getPort()); ?this.s = s;(new Thread(this)).start(); ?public void actionPerformed(ActionEvent e) ?{ ?try ?{ ?DataOutputStream dos = new DataOutputStream(s.getOutputStream()); ?dos.writeUTF("Servidor:\n" + ta2.getText() + "\n" ); ?ta1.append("Servidor:\n" + ta2.getText() + "\n"); ?ta2.setText(""); ?} ?catch (IOException E)?{ ?} ?} ? public void send(String str, String st) lanza IOException ?{ ?DataOutputStream dos = new DataOutputStream(s.getOutputStream()); ?dos.writeUTF(st + "say:\n" + str); disponer() ?{ ?intentar ?{ ?// this.setVisible(false); ?super.dispose(); ?ta.append(s.getInetAddress().getHostName() + "salir" + "\n") ?if (s != null) ?s.close(); ?cClient.remove(this); ?ta.append("Número actual de personas en línea: " + cClient.size() + "\n\n" ); ?} ?catch (Excepción e) ?{ ?e.printStackTrace
(); ?} ?} ?public void run() ?{ ?intenta ?{ ?DataInputStream dis = new DataInputStream(s.getInputStream()); ().getHostName(); ? while (str != null && str.length() != 0) ?{ ?for (Iterator } public static void main(String[] args) lanza una excepción { ?JFrame.setDefaultLookAndFeelDecoated(true); ?ChatServer cs = new ChatServer(8888) ?cs.startServer(); } }