In Javaweb -Projekten müssen wir oft die Socket -Kommunikation verwenden, um Funktionen zu implementieren. Wenn wir Socket im Web verwenden, müssen wir ein Listener -Programm einrichten und das Hören mit Socket starten, wenn das Programm startet. Unser Anwendungsszenario befindet sich in einem Java -Projekt, bei dem externe Hardware -Geräte über TCP kommunizieren müssen, um Daten vom Gerät hochgeladen und auf die Daten zu reagieren.
Schauen wir uns den Web -Hörcode an:
Importieren Sie javax.servlet.servletContexevent; importieren javax.servlet.servletContextListener; sockethread.closesocketserver (); sockethread.interrupt (); }} @Override public void contextInitialized (servletContexevent arg) {// Todo automatisch generierte Methode Stub if (null == sockethread) {// neue Thread-Klasse-Sockethread = new SocketThread (null) erstellen; // Thread Sockethread.start () starten; }}}Thread erstellen:
importieren java.io.ioxception; import java.net.serversocket; import java.net.socket; import java.util.arrayList; import java.util.list; public class SocketThread erweitert Thread {private serversocket sserversocket = null; public socketThread (ServerSocket ServerScoket) {try {if (null == serversocket) {this.ServerSocket = new ServerSocket (); System.out.println ("Socket start"); }} catch (Ausnahme E) {System.out.println ("Sockethread -Fehler erstellen Socket Service"); E. printstacktrace (); }} public void run () {while (true) {try {if (serversSocket == null) {break;} else if (serversSocket.isclosed ()) {break;} Socket Socket = ServerSocket.accept (); if (null! t.start (); } else {break;}} catch (Ausnahme e) {System.out.println ("Fehler beim Erstellen von Socket -Service in Sockethread"); E. printstacktrace (); }}} public void clossocketServer () {try {if (null! }} catch (ioException e) {// Todo automatisch generierter Fangblock E. printstacktrace (); }}}Verarbeitung empfangene Daten:
importieren java.io.bufufferedReader; import Java.io.ioxception; import Java.io.inputStreamReader; Import Java.io.outputStream; Import Java.net.Socket; öffentliche Klasse Socketoperate -Implements Runnable {private Socket Socket; // Eingabestream, der der von diesem Thread BufferedReader BR = NULL verarbeiteten Socket entspricht; String str = null; String content = null; InputStreamReader reader = null; public socketoperate (Socket Socket) löst IoException {this.socket = Socket aus; Reader = new InputStreamReader (this.socket.getInputStream (), "utf-"); BR = New BufferedReader (Leser); } @Override public void run () {try {// Verwenden Sie eine Schleife, um die vom Client vom Client gesendeten Daten kontinuierlich zu lesen, während (true) {content = readFromClient (); System.out.println (Inhalt); if (content == null) {break; } OutputStream os = socket.getOutputStream (); os.write (("res, ok, <Jahrklasse, Xiao Ming>,,#" + "/n").getbytes("utf-")); os.flush ();}} catch (ioException e) {e.printstacktrace (); }} // Definieren Sie die Methode zum Lesen von Clientdaten private String readFromClient () {try {str = br.readline (); return str; } // Wenn eine Ausnahme erfasst wird, bedeutet dies, dass der Client, der dem Socket entspricht, den Catch (ioException e) {try {br.close (); reader.close (); socket.close ();} catch (ioException e) {// todo auto-generiertes blocke.printstacktrace (); }}Clientcode:
packageImport java.io.*; import Java.net. InputStreamReader (socket.getInputStream ()); int i =; while (socket.isconnected ()) {os.print ("Beat ,,,,#"+"/n"); Looping OS.CLOSE (); // Socket -Ausgangsstream schließen ist.CLOSE (); // Socket Socket Socket schließen .CLOSE (); // Socket schließen}}Die oben genannte Methode ist die Verwendung von Socket-Kommunikations-Multi-Thread- und Long-Verbindungen in Java-Webprojekten, die vom Editor eingeführt wurden. Ich hoffe, es wird für alle hilfreich sein!