Plusieurs fois dans les projets Javaweb, nous devons utiliser la communication de socket pour implémenter des fonctions. Lorsque vous utilisez Socket sur le Web, nous devons établir un programme d'écoute et commencer à écouter le socket au début du programme. Notre scénario d'application est dans un projet Java, qui nécessite des dispositifs matériels externes pour communiquer via TCP pour obtenir des données téléchargées par l'appareil et répondre aux données.
Jetons un coup d'œil au code d'écoute Web:
Importer javax.servlet.servletContextevent; Importer Javax.servlet.servletContextListener; public class AssendSoCtListener implémente ServletContextListener {private socketThread socketThread; public void contextDestroyed (socketThredThread.isInterrup socketThread.closeSocketServer (); socketThread.interrupt (); }} @Override public void contextInitialized (ServletContextevent arg) {// TODO Méthode générée automatiquement Stub if (null == socketThread) {// Créer une nouvelle classe de threads socketThread = new socketThread (null); // Démarrer le thread socketThread.Start (); }}}Créer du thread:
Importer java.io.ioException; import java.net.serversocket; import java.net.socket; import java.util.arraylist; import java.util.list; public class socketthread étend thread {private serversocket socket = null; public socketThread (serversocket serverscoket) {try {if (null == serversocket) {this.serversocket = new serversocket (); System.out.println ("Socket Start"); }} catch (exception e) {System.out.println ("SocketThread Création du service de socket"); e.printStackTrace (); }} public void run () {while (true) {try {if (serveSocket == null) {break;} else if (serversocket.isclosed ()) {Break;} socket socket = serversocket.accept (); if (null! = socket &&! socket.isclosed ()) {// Process accepté thread de données t = nouveau thread (nouveau socketoperate (socket)); t.start (); } else {break;}} catch (exception e) {System.out.println ("Erreur Création du service de socket dans socketThread"); e.printStackTrace (); }}} public void closeSocketServer () {try {if (null! = serversocket &&! serversocket.isclosed ()) {serversocket.close (); }} catch (ioException e) {// TODO GÉNÉRATEUR AUTO GÉNÉRÉ BLOC E.PRINTSTACKTRACE (); }}}Traitement des données reçues:
Importer java.io.BuffereDReader; import java.io.ioException; import java.io.inputStreamReader; import java.io.outputStream; import java.net.socket; socket de classe publique implémente Runnable {socket privé socket; // Stream d'entrée correspondant à la prise traitée par ce thread BufferedReader br = null; String str = null; String Content = NULL; InputStreamReader Reader = NULL; SocketOpérate publique (socket socket) lève IOException {this.socket = socket; Reader = new inputStreamReader (this.socket.getInputStream (), "utf-"); br = new BufferedReader (lecteur); } @Override public void run () {try {// Utilisez une boucle pour lire en continu les données envoyées par le client à partir du socket while (true) {content = readFromClient (); System.out.println (contenu); if (content == null) {break; } OutputStream os = socket.getOutputStream (); OS.Write (("Res, OK, <Classe année, xiao ming> ,, #" + "/n").getbytes("utf-")); os.flush ();}} catch (ioException e) {e.printStackTrace (); }} // Définissez la méthode pour lire les données du client Private String ReadFromClient () {try {str = br.readline (); retour STR; } // Si une exception est capturée, cela signifie que le client correspondant au socket a fermé le Catch (ioException e) {try {br.close (); reader.close (); socket.close ();} catch (ioException e) {// TODO return null; }}Code client:
PackageImport Java.io. *; Importer java.net. *; public class talkClient {public static void main (String args []) lève un inconnue, ioException {socket socket = new socket ("..." InputStreamReader (socket.getInputStream ())); int i =; while (socket.isconnected ()) {os.print ("beat ,,,,., #" + "/ N"); os.flush (); System.out.println ("client:" + i); System.out.println ("Server:" + is.readline ()); os.close (); // Le flux de sortie de socket fermer est.close (); // fermer socket socket socket.close (); // Fermer la prise}}Ce qui précède est la méthode d'utilisation des connexions multipliées et longues de communication à socket dans les projets Web Java introduits par l'éditeur. J'espère que ce sera utile à tous!