Recientemente comencé un proyecto en el que existe la necesidad de comunicación web en línea. No he escrito código durante mucho tiempo y no estoy familiarizado con él. Así que escribí por primera vez una demostración y la practicé y la compartí en la plataforma de red Wulin para hacer un registro para que pueda usarse con todos.
Permítanme decirle primero los pasos de implementación:
1. Use el componente AWT y el socket para implementar un cliente único simple para enviar continuamente mensajes al servidor;
2. Combinado con subprocesos, realice una conexión de clima múltiple al servidor para enviar mensajes;
3. Implemente el servidor que reenvía mensajes del cliente a todos los clientes y muestrelos en el cliente al mismo tiempo;
4. Cambie la interfaz de la ventana generada por el componente AWT a la interfaz que se muestra por JSP o HTML front-end, y cambie el cliente implementado por Java Socket a la implementación de la tecnología front-end.
Aquí primero implementamos la función simple del primer paso, la dificultad es:
1. Nunca he usado el componente AWT y nunca he usado eventos de escucha relacionados con Java;
2. No he usado enchufes durante largos períodos de tiempo para interactuar entre el cliente y el servidor, y realmente no he desarrollado la estructura CSS.
El código para implementar la función es el siguiente:
Cliente:
paquete chat.chat; import java.awt.borderlayut; import java.awt.frame; import java.awt.textarea; import java.awt.textfield; import java.awt.event.actionEvent; import java.awt.event.actionListener; import java.awt.event.windowadapter; import java.awt.event.windowevent; import java.io.dataOutputStream; import java.io.ioException; import java.net.socket; import java.net.unknownHosTexception; / ** * Cliente de chat en línea 1. Genere el esquema gráfico de la interfaz de la ventana 2. Agregue un evento de cierre al esquema 3. Agregue un área de entrada y un área de visualización de contenido al esquema 4. Agregue un evento de retorno de carro para el área de entrada * 5. Establezca una conexión de servidor y envíe datos * * @author TUzongXUN123 * */ Clasia pública Chatclient Extensa marco {// Área de entrada de usuario privado privado TFTield = NEWNECHIE ();););););););););););); // Área de visualización de contenido TextAREA private taste = new TextAREA (); enchufe de zócalo privado = nulo; // Salida de datos flujo de datos privado DatautPutStream DataOutputStream = NULL; public static void main (string [] args) {nuevo chatClient (). LauncFrame (); } / ** * Crear una ventana gráfica simple * * @author: tuzongxun * @title: launcframe * @param * @return void * @date 18 de mayo de 2016 9:57:00 am * @throws * / public void launcframe () {setLocation (300, 200); this.setsize (200, 400); agregar (tftxt, borderLayout.South); Agregar (Tarea, BorderLayout.north); embalar(); // Escuche el evento de cierre de la ventana de la interfaz gráfica this.addwindowlistener (New WindowAdapter () {@Override public void WindowClosing (WindowsEvent E) {System.exit (0); disconnect ();}}); tftxt.addactionListener (new tflister ()); setVisible (verdadero); conectar(); } / ** * Conéctese al servidor * * @author: tuzongxun * @title: conectar * @param * @return void * @date 18 de mayo de 2016 9:56:49 am * @throws * / public void Connect () {intente {// Crear un nuevo servidor Connection Socket = New Tocket ("127.0.0.0.1", 8888); // Obtener la salida del cliente stream dataOutputStream = new DataOutputStream (Socket.getOutputStream ()); System.out.println ("conectarse al servidor"); } capt (desconocidoHosTexception e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); }} / ** * Cerrar recursos del cliente * * @author: tuzongxun * @title: disconnect * @param * @return void * @date 18 de mayo de 2016 9:57:46 am * @throws * / public void disconnect () {intente {datautputStream.close (); socket.close (); } catch (ioException e) {E.PrintStackTrace (); }} / ** * Envíe un mensaje al servidor * * @author: tuzongxun * @title: sendMessage * @param @param text * @return void * @date 18 de mayo de 2016 9:57:56 am * @throws * / private void sendmessage (texto de cadena) {intente {datautputStream.writf (text); dataOutputStream.Flush (); } catch (ioException e1) {e1.printstackTrace (); }} / ** * Área de entrada de la ventana de gráficos para escuchar el evento de retorno de carro * * @author tuzongxun123 * * / private class tflister implementa actionListener {@Override public void accionFormed (ActionEvent e) {String text = tftxt.getText (). Trim (); taxA.setText (texto); tftxt.settext (""); // Enviar datos al servidor SendMessage (texto); }}}Servidor:
paquete chat.chat; import java.io.datainputstream; import java.io.eofexception; import java.io.ioException; import java.net.bindexception; import java.net.serversocket; import java.net.socket; /*** Java usa componentes Socket y AWT para simplemente implementar la función de chat en línea. El servidor puede realizar el servidor para enviar continuamente mensajes al servidor después de conectar un cliente* pero no admite múltiples clientes para conectarse al mismo tiempo. La razón es que después de obtener la conexión del cliente en el código, seguirá escuchando las entradas del cliente en bucle, causando bloqueo* para que el servidor no pueda escuchar a otro cliente dos veces. Si desea implementarlo, debe usar asíncrono o multithreaded * * @author tuzongxun123 * */ public class chatserver {public static void main (string [] args) {// si el servidor se inicia con éxito boolean isstart = false; // Servidor Socket ServerSocket ss = null; // SOCKEL SOCKEL DE CLIENTE = NULL; // Servidor Leer Data de Cliente Entrada de datos DataintStream dataInputStream = null; intente {// Iniciar servidor ss = nuevo Serversocket (8888); } Catch (BindException e) {System.out.println ("El puerto ya está en uso"); // cierre el programa System.exit (0); } catch (Exception e) {E.PrintStackTrace (); } try {isStart = true; while (isStart) {boolean isconnect = false; // iniciar el socket de escucha = ss.accept (); System.out.println ("One Client Connect"); IsConnect = True; while (isConnect) {// Obtenga el cliente de entrada de cliente DataintStream = new DataInputStream (Socket.GetInputStream ()); // leer los datos aprobados por el mensaje de cadena del cliente = DataInputStream.ReadUtf (); System.out.println ("Cliente dice:" + Mensaje); }}} Catch (EOFException e) {System.out.println ("Cliente cerrado!"); } catch (Exception e) {E.PrintStackTrace (); } Finalmente {// cierre el recurso relacionado Try {dataInputStream.close (); socket.close (); } catch (ioException e) {E.PrintStackTrace (); }}}}Lo anterior es el conocimiento relevante sobre Java Socket que implementa una función de chat en línea simple (I) presentada por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!