Este artículo describe la implementación de la sala de chat de socket basada en el protocolo TCP en la programación Java. Compártelo para su referencia, como sigue:
Aquí, los sockets de socket se utilizan para la programación, que logra una comunicación dual entre el servidor y el cliente en función del servicio confiable TCP.
Lado del servidor del servidor:
package com.han;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.*;import java.net.*;import javax.swing.JDialog;import javax.swing.jscrollpane; import javax.swing.jtextarea; import javax.swing.jtextfield;/*** Este programa implementa la parte de programación del servidor de un programa TCP. * La programación utilizando enchufes de socket se realiza para lograr una doble comunicación con el cliente en función del servicio confiable TCP. * Consulte el cliente de clase de cliente en este paquete para programar * @author Han * */ @supressWarnings ("serial") Public Class Server extiende JDialog {Private BufferedReader Reader; escritor de printwriter privado; servidor privado de serversocket; enchufe privado; privado jtexTarea ta = new JTextArea (); JSCROLLPANE privado sp = new JScrollPane (TA); privado jtextfield tf = new JTextField (); Contenedor CC; servidor público (título de cadena) {settitle (título); addwindowlistener (new WindowAdapter () {public void WindowClosing (WindowEvent We) {desestimación (); // revoca todos los recursos relacionados relacionados con el cuadro de diálogo System.exit (0); // Salir del programa normalmente}}); cc = getContentPane (); setLayout (nulo); ta.SetLineWrap (verdadero); ta.SetEditable (falso); sp.setBounds (0,0,300,342); tf.setBounds (0,342,300,25); cc.add (sp); cc.add (tf); tf.addactionListener (new ActionListener () {public void ActionPerformed (ActionEvent E) {try {Writer = New PrintWriter (Socket.getOutputStream (), true);} Catch (IOException e1) {// TODO Generado Generado Bloque E1.PrintStackTrace ();} Writer.Println (tf.Ga.); ta.append ("user1:"+tf.gettext ()+'/n'); } void getServer () {try {servidor = new Serversocket (8998); ta.append ("El socket del servidor se ha creado con éxito/n"); while (true) {ta.append ("Esperando la conexión del cliente/n"); socket = server.accept (); ta.append ("Cliente conectado/n"); lector = new BufferedReader (new InputStreamReader (Socket.getInputStream ())); getClientMessage (); }} catch (Exception e) {E.PrintStackTrace (); }} private void getClientMessage () {try {while (true) {String News = Reader.readline (); if (news! = null) {ta.append ("user2:"+news+"/n"); } else {ta.append ("user2 (cliente) desconectado/n"); romper; }}} Catch (ioException e) {// tODO Auto Generado Bloque E.PrintStackTrace (); } try {if (Reader! = Null) {Reader.close (); }} Catch (ioException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); } if (socket! = null) {try {socket.close (); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); }}} public static void main (string [] args) {servidor user1 = nuevo servidor ("user1"); user1.setBounds (0,0,300,400); user1.setResizable (falso); user1.setVisible (verdadero); user1.getServer (); }}Cliente cliente:
paquete com.han; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import javax.swing.*;/***Este programa implementa la parte de programación del cliente de un programa TCP. * La programación con sockets de socket se realiza para lograr una comunicación dual con el servidor en función del servicio confiable TCP. * Consulte la clase del servidor en este paquete para programar el servidor * Se puede ejecutar en diferentes plataformas y diferentes máquinas, pero la dirección IP escrita en el código debe modificarse en la dirección IP de la máquina que ejecuta el servidor del programa del servidor. * @author Han * */ @supressWarnings ("serie") Cliente de clase pública extiende JDialog {Private BufferedReader Reader; escritor de printwriter privado; enchufe privado; privado jtexTarea ta = new JTextArea (); JSCROLLPANE privado sp = new JScrollPane (TA); privado jtextfield tf = new JTextField (); Contenedor CC; Cliente público (título de cadena) {settitle (título); addwindowlistener (new WindowAdapter () {public void WindowClosing (WindowEvent We) {desestimación (); // revoca todos los recursos relacionados relacionados con el cuadro de diálogo System.exit (0); // Salir del programa normalmente}}); cc = getContentPane (); setLayout (nulo); ta.SetLineWrap (verdadero); ta.SetEditable (falso); sp.setBounds (0,0,300,342); tf.setBounds (0,342,300,25); cc.add (sp); cc.add (tf); tf.addactionListener (new ActionListener () {public void ActionPerformed (ActionEvent E) {Writer.println (tf.gettext ()); ta.append ("user2:"+tf.getText ()+'/n'); tf.settext ("");}); } private void conecte () {ta.append ("intente conectar/n"); intente {socket = new Socket ("192.168.1.3", 8998); } Catch (desconocidoHostException e) {// toDO Auto Generated Catch Block E.PrintStackTrace (); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); } try {writer = new PrintWriter (Socket.getOutputStream (), true); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); } ta.append ("Completa la conexión/n"); } private void getClientMessage () {try {lector = new BufferedReader (new InputStreamReader (Socket.GetInputStream ())); while (true) {String News = Reader.ReadLine (); if (news! = null) {ta.append ("user1:"+news+"/n"); } else {ta.append ("user1 (servidor) se ha desconectado y cuando se vuelve a conectar el servidor, reinicie el usuario2 (cliente) para la comunicación/n"); romper; }}} Catch (ioException e) {// tODO BLOQUE DE CABTA AUTO GENERADA TA.Append ("User1 (servidor) para la comunicación/n"); E.PrintStackTrace (); } try {if (Reader! = Null) {Reader.close (); }} Catch (ioException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); } if (socket! = null) {try {socket.close (); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); }}} public static void main (string [] args) {Client user2 = new Client ("user2"); user2.setBounds (0,0,300,400); user2.setVisible (verdadero); user2.setResizable (falso); user2.connect (); user2.getClientMessage (); }}Para obtener más información sobre el contenido relacionado con Java, consulte los temas de este sitio: "Resumen de las habilidades de programación de socket de Java", "Resumen de las habilidades de operación de archivos y directorio de Java", "Tutorial sobre estructura de datos de Java y algoritmo", "Resumen de las habilidades de nodo de operación DOM de Java" y "Resumen de las habilidades de operación de java" "
Espero que este artículo sea útil para la programación Java de todos.