Muitas vezes nos projetos Javaweb, precisamos usar a comunicação do soquete para implementar funções. Ao usar o soquete na Web, precisamos estabelecer um programa de ouvinte e iniciar o Socket Heading quando o programa iniciar. Nosso cenário de aplicativo está em um projeto Java, que exige que os dispositivos de hardware externos se comuniquem através do TCP para obter dados enviados pelo dispositivo e responder aos dados.
Vamos dar uma olhada no código de escuta da web:
importar javax.servlet.servletContexTevent; importar javax.servlet.servletContextListener; public class; atendê -lotesocetlistener implementa servletContextListener {private SocketThread (null! SocketThread.ClosSocketServer (); SocketThread.Interrup (); }} @Override public void contextinitialized (servletContextevent arg) {// ToDO Method Method Stub if (null == SocketThread) {// Crie nova classe Thread SocketThread = new SocketThread (null); // Iniciar thread socketthread.start (); }}}Crie thread:
importar java.io.ioException; importar java.net.erversocket; importar java.net.socket; importar java.util.ArrayList; importar java.util.list; classe pública SocketThread estende o thread {private ServerSocketsocket = null; public SocketThread (ServerSocket ServerScoket) {try {if (null == ServerSocket) {this.serversocket = new ServerSocket (); System.out.println ("Socket Start"); }} catch (Exceção e) {System.out.println ("Erro do SocketThread Criando o Socket Service"); E.PrintStackTrace (); }} public void run () {while (true) {try {if (serversocket == null) {break;} else if (serversocket.isclosed ()) {break;} soquete = serversocket.accept (); if (null! = Socket &&! Socket.iscosed ()) {// Process aceito thread thread t = novo thread (new soockoperate (soquete)); t.start (); } else {break;}} catch (Exceção e) {System.out.println ("Erro criando serviço de soquete no soquetethread"); E.PrintStackTrace (); }}} public void closesocketServer () {try {if (null! }} catch (ioexception e) {// TODO BLOCO DE CATAGEM AUTOGERATO E.PRINTSTACKTRACE (); }}}Processando dados recebidos:
importar java.io.bufferedReader; importar java.io.ioException; importar java.io.inputStreamReader; importar java.io.outputStream; importar java.net.socket; classe pública Socketperate implementa executáveis {soquete privado; // fluxo de entrada correspondente ao soquete processado por este thread buffarreder BR = null; String str = null; String content = null; InputStreamReader Reader = NULL; Public Socketperate (soquete) lança IoException {this.socket = soket; leitor = new inputStreamReader (this.socket.getInputStream (), "utf-"); Br = new BufferredReader (leitor); } @Override public void run () {try {// use um loop para ler continuamente os dados enviados pelo cliente do soquete while (true) {content = readfromClient (); System.out.println (content); if (content == null) {break; } OutputStream OS = Socket.getOutputStream (); OS.WRITE ((("Res, OK, <ANEXO ANO, XIAO MING> ,,#" + "/n").getbytes("utf-")); os.flush ();}} catch (ioexception e) {e.printStackTrace (); }} // Defina o método para ler os dados do cliente Private String readfromClient () {try {str = b.readline (); retornar str; } // Se uma exceção for capturada, significa que o cliente correspondente ao soquete fechou a captura (ioexception e) {try {Br.close (); reader.close (); soket.close ();} catch (ioexception e) {// tlo-generated capt blocke.printstack (); }}Código do cliente:
packageImport java.io.*; importar java.net.*; classe pública talkclient {public static void main (string args []) lança desconhecidohostexception, ioexception {soket. InputStreamReader (soket.getInputStream ())); int i =; while (socket.isconnected ()) {OS.print ("Beat ,,,,.,#"+"/N"); OS.flush (); os.close (); // Fechar o fluxo de saída do soquete is.close (); // Fechar soquete de fluxo de entrada do soquete.close (); // fechar soquete}}O exposto acima é o método de usar conexões multidreadas e longas de comunicação de soquete em projetos da Web Java introduzidos pelo editor. Espero que seja útil para todos!