Muchas veces en los proyectos de Javaweb, necesitamos utilizar la comunicación de socket para implementar funciones. Cuando usamos Socket en la web, necesitamos establecer un programa de oyentes e iniciar la escucha de socket cuando comience el programa. Nuestro escenario de aplicación se encuentra en un proyecto Java, que requiere dispositivos de hardware externos para comunicarse a través de TCP para obtener datos cargados por el dispositivo y responder a los datos.
Echemos un vistazo al código de escucha web:
import javax.servlet.servletContextEvent; import javax.servlet.servletContextListener; public class AttendSocetListener implementa ServletContextListener {private Socketthread SocketThread; Public Void contextDestroyed (ServletContextEvent arg) {if! = Socketthread &&! Socketthread.iseSeSeS Socketthread.ClosSocketServer (); Socketthread.interrupt (); }} @Override public void contextInitialized (servletContextEvent arg) {// tODO STUB de método generado automático if (null == SocketThread) {// Crear nueva clase de hilo SocketThread = nuevo SocketThread (NULL); // Iniciar el subproceso Socketthread.start (); }}}Crear hilo:
import java.io.ioException; import java.net.serversocket; import java.net.socket; import java.util.arrayList; import java.util.list; la clase pública SocketThread extiende el subproceso {Serversocket privado Serversocket = Null; public Socketthread (ServerSocket ServerScoket) {try {if (null == ServerSocket) {this.SerVersocket = new Serversocket (); System.out.println ("Soce Start"); }} Catch (Exception e) {System.out.println ("Socketthread Error creando el servicio Socket"); E.PrintStackTrace (); }} public void run () {while (true) {try {if (serversocket == null) {break;} else if (serversocket.isClosed ()) {break;} socket socket = serversocket.accept (); if (null! = Socket &&! Socket.isClosed ()) {// Process Data Data Thread t = New Hread (new SocketOperate (Socket)); t.Start (); } else {break;}} Catch (Exception e) {System.out.println ("Error al crear servicio de socket en Socketthread"); E.PrintStackTrace (); }}} public void ClosesocketServer () {try {if (null! = Serversocket &&! Serversocket.isClosed ()) {Serversocket.close (); }} Catch (ioException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); }}}Procesamiento de datos recibidos:
import java.io.bufferedReader; import java.io.ioException; import java.io.inputstreamreader; import java.io.outputstream; import java.net.socket; public class SocketOperate implementa runnable {socket de socket privado; // flujo de entrada correspondiente al socket procesado por este subproceso BufferedReader br = null; Cadena str = nulo; String content = null; InputStreamReader Reader = NULL; Public SocketOperate (Socket Socket) lanza IOException {this.socket = socket; lector = new InputStreamReader (this.socket.getInputStream (), "utf-"); Br = nuevo BufferedReader (lector); } @Override public void run () {try {// use un bucle para leer continuamente los datos enviados por el cliente desde el socket while (true) {content = readFromClient (); System.out.println (contenido); if (content == null) {break; } OutputStream OS = Socket.getOutputStream (); OS.Write (("Res, OK, <Year Class, Xiao Ming>,#" + "/n").getBytes("Utf-")); OS.Flush ();}} Catch (ioException e) {E.PrintStackTrace (); }} // Defina el método para leer datos de cliente privado cadena readFromClient () {try {str = br.readline (); regresar str; } // Si se atrapa una excepción, significa que el cliente correspondiente al socket ha cerrado la captura (ioException e) {try {br.close (); lector.close (); socket.close ();} capt (ioexception e) {// todo generated catch blocke.printstacktrace ();}}} ull null; }}Código del cliente:
packageimport java.io.*;import java.net.*;public class TalkClient {public static void main(String args[]) throws UnknownHostException, IOException {Socket socket=new Socket("...",);PrintWriter os=new PrintWriter(socket.getOutputStream());BufferedReader is=new BufferedReader(new InputStreamReader (Socket.GetInputStream ())); int i =; while (Socket.isConnected ()) {OS.Print ("beat ,,,,,.,#"+"/N"); OS.Flush (); System.out.Println ("Cliente:"+I); System.Println ("Server:"+IS.Readline ()); I ++;} os.close (); // Cerrar la transmisión de salida de socket es.close (); // Cerrar el flujo de entrada de socket Socket.close (); // Cerrar socket}}Lo anterior es el método de utilizar conexiones de múltiples subprocesos y largas conexiones en proyectos web Java introducidos por el editor. ¡Espero que sea útil para todos!