Javawebプロジェクトでは、ソケット通信を使用して機能を実装する必要があります。 WebでSocketを使用する場合、リスナープログラムを確立し、プログラムの開始時にソケットリスニングを開始する必要があります。アプリケーションシナリオはJavaプロジェクトにあります。これにより、外部ハードウェアデバイスは、デバイスによってアップロードされたデータを取得してデータに応答するためにTCPを介して通信する必要があります。
Webリスニングコードを見てみましょう。
javax.servlet.servletcontextevent;インポートjavax.servlet.servletcontextlistener; public class avertingsocetlistener servletcontextlistener {private socketthread sockethread; public void contextdestroyed {servletcontextroyed(servletcontextroyed(interrudd.&socket){null! socketthread.closeSocketserver(); socketthread.interrupt(); }} @Override public void contextInitialized(servletcontextevent arg){// dodo auto-eneratedメソッドスタブif(null == socketthread){//新しいスレッドクラスsocketthread = new socketthread(null); //スレッドSocketThread.start()を起動します。 }}}スレッドの作成:
java.io.ioexception;インポートjava.net.serversocket; Import java.net.socket; import java.util.arraylist; import java.util.list; public class socketthread extends {private serversocket serversocket = 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エラーの作成ソケットサービス"); 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()){//受け入れられたデータスレッドt = newスレッド(new Socketoperate(socket)); t.start(); } else {break;}} catch(Exception E){System.out.println( "SocketThreadでソケットサービスの作成エラー"); e.printstacktrace(); }}} public void closesocketserver(){try {if(null!= serversocket &&!serversocket.isclosed()){serversocket.close(); }} catch(ioException e){// dodo auto-enerated catch block e.printstacktrace(); }}}受信したデータの処理:
java.io.bufferedreader; Import java.io.ioexception; Import java.io.inputStreamReader; Import java.outputStream; Import java.net.Socket; public class socket -operateは実行可能{プライベートソケットソケット; //このスレッドで処理されたソケットに対応する入力ストリームBufferedReader br = null;文字列str = null;文字列コンテンツ= null; inputStreamReader reader = null; public socketoperate(socket socket)はioexceptionをスローします{this.socket = socket; reader = new inputStreamReader(this.socket.getInputStream()、 "utf-"); BR = new BufferedReader(Reader); } @Override public void run(){try {//ループを使用して、ソケットからクライアントが送信したデータを(true){content = readfromclient(); System.out.println(content); 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(); }} //クライアントデータを読み取る方法を定義しますprivate string readfromclient(){try {str = br.readline(); strを返します。 } //例外がキャッチされている場合、ソケットに対応するクライアントがキャッチを閉じたことを意味します(ioException e){try {br.close(); reader.close(); socket.close();} catch(ioexception e){// todo auto-generated catch blocke.printstacttrace();}}} }}クライアントコード:
packageimport java.io。*; import java.net。*; public class talkclient {public static void main(string args [])throws nownowshostexception、ioexception {socket socket = new socket( "..."、); printwriter os = new printwriter(socket.getotputtream()); inputStreamReader(socket.getinputStream()); int i =; while(socket.isconnected()){os.print( "beat ,,,。、#"+"/n"); system.out.println( "client:"+i); system.out.out.println(entline: "+is leadline: os.close(); //ソケット出力ストリームを閉じるclose(); //ソケット入力ストリームsocket.close()を閉じる; //ソケットを閉じる}}上記は、エディターが導入したJava Webプロジェクトでソケット通信マルチスレッドと長い接続を使用する方法です。私はそれが誰にでも役立つことを願っています!