Javaweb 프로젝트에서 여러 번 소켓 통신을 사용하여 기능을 구현해야합니다. 웹에서 소켓을 사용할 때는 리스너 프로그램을 설정하고 프로그램이 시작될 때 소켓 청취를 시작해야합니다. 응용 프로그램 시나리오는 Java 프로젝트에 있습니다.이 프로젝트는 외부 하드웨어 장치가 TCP를 통해 통신하여 장치에서 업로드 한 데이터를 얻고 데이터에 응답해야합니다.
웹 듣기 코드를 살펴 보겠습니다.
import javax.servlet.servletcontextevent; import javax.servlet.servletcontextlistener; public class angindsocetlistener emperments servletcontextListener {private socketthread socketthread; public void contextdestroyed (servletcontextevent arg) {null! = socketthred (socketthred) socketthread.closeSocketServer (); socketthread.interrupt (); }} @override public void contextinitialized (servletcontextevent arg) {// todo 자동 생성 메소드 스터브 if (null == socketthread) {// 새 스레드 class socketthread = new socketthread (null); // 스레드 socketthread.start (); }}}스레드 생성 :
import java.io.ioexception; import java.net.serversocket; import java.net.socket; import java.util.arraylist; import java.util.list; public class socketthread는 스레드 {private serversocket servesocket = null; public socketthread (serversocket serverscoket) {try {if (null == serversocket) {this.serversocket = new Serversocket (); System.out.println ( "소켓 시작"); }} catch (예외 e) {System.out.println ( "SocketThread 오류 생성 소켓 서비스"); e.printstacktrace (); }} public void run () {while (true) {try {if (serversocket == null) {break;} else if (serversocket.isclosed ()) {break;} 소켓 = serversocket.accept (); if (null! = socket &&! socket.isclosed ()) {// 프로세스 허용 된 데이터 스레드 t = 새 스레드 (new socketoperate (socket)); t.start (); } else {break;}} catch (예외 e) {System.out.println ( "SocketTheR Stread에서 소켓 서비스 생성 오류"); e.printstacktrace (); }}} public void closeSocketServer () {try {if (null! = serversocket &&! serversocket.isclosed ()) {serversocket.close (); }} catch (ioexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }}}수신 데이터 처리 :
import java.io.bufferedReader; import java.io.ioException; import java.io.inputStreamReader; import java.io.outputStream; import java.net.socket; public class socketoperate emplements runnable {private socket socket; //이 스레드에 의해 처리 된 소켓에 해당하는 입력 스트림 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 (컨텐츠); 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 (); }} // 클라이언트 데이터를 읽는 메소드 정의 개인 문자열 readfromclient () {try {str = br.readline (); Return str; } // 예외가 잡히면 소켓에 해당하는 클라이언트가 캐치를 닫았다는 것을 의미합니다 (ioException e) {try {br.close (); reader.close (); socket.close ();} catch (ioexception e) {// todo auto-enterated catch.printstacktrace (); }}클라이언트 코드 :
PackageImport Java.oi.*; import java.net.*; public class talkclient {public static void main (String args [])은 unknownhostexception, ioexception {socket socket = new Socket ( "..."); printwriter os = new printwriter (socket.getoutputstream ()); bufferedreader is = new bufleredreader (new bufleredreader) inputStreamReader (socket.getInputStream ()); int i =; while (socket.isconcected ()) {os.print ( "beat ,,,,#"+"/n"); os.flush (); system.out.println ( "client :"+i); system.out.println ( "서버 :") os.close (); // 소켓 출력 스트림 is.close (); // 소켓 입력 스트림 socket.close (); // 소켓을 닫습니다}}위의 것은 편집자가 소개 한 Java 웹 프로젝트에서 소켓 통신 멀티 스레드 및 긴 연결을 사용하는 방법입니다. 나는 그것이 모두에게 도움이되기를 바랍니다!