Berkali -kali dalam proyek Javaweb, kita perlu menggunakan komunikasi soket untuk mengimplementasikan fungsi. Saat menggunakan soket di web, kita perlu membuat program pendengar, dan mulai mendengarkan soket saat program dimulai. Skenario aplikasi kami berada dalam proyek Java, yang mengharuskan perangkat perangkat keras eksternal untuk berkomunikasi melalui TCP untuk mendapatkan data yang diunggah oleh perangkat dan menanggapi data.
Mari kita lihat kode mendengarkan web:
impor javax.servlet.servletcontextEvent; import javax.servlet.servletcontextListener; kelas publik ATENDENCOCETListener mengimplementasikan servletContextListener {private socketThread socketThread) public void contextDestroyed (servletContextEvent argetThread {if (null! = Null! SocketThread.closesocketserver (); SocketThread.Interrupt (); }} @Override public void contextInitialized (servletContextEvent arg) {// TODO Metode yang dihasilkan otomatis Stub if (null == socketThread) {// Buat kelas utas baru socketThread = socketThread baru (null); // Mulai Thread SocketThread.Start (); }}}Buat utas:
Impor java.io.ioException; impor java.net.serversocket; impor java.net.socket; impor java.util.arraylist; import java.util.list; socketthread kelas publik memperluas utas {private serversocket serversocket = null; SocketThread publik (ServerSocket ServersCoket) {coba {if (null == serversocket) {this.serversocket = new serverersocket (); System.out.println ("Socket Start"); }} catch (Exception e) {System.out.println ("SocketThread kesalahan membuat layanan soket"); e.printstacktrace (); }} public void run () {while (true) {coba {if (serversocket == null) {break;} lain jika (serversocket.isclosed ()) {break;} socket socket = serversocket.accept (); if (null! = socket &&! socket.isclosed ()) {// proses yang diterima utas data t = utas baru (socketoPerate baru (socket)); t.start (); } else {break;}} catch (Exception e) {System.out.println ("Kesalahan Membuat Layanan Socket di SocketThread"); e.printstacktrace (); }}} public void closeSocketServer () {coba {if (null! = serversocket &&! serversocket.isclosed ()) {serversocket.close (); }} catch (ioException e) {// TODO AUTO-EME-GOYATED Catch Block E.PrintStackTrace (); }}}Memproses data yang diterima:
Impor java.io.bufferedReader; impor java.io.ioException; impor java.io.inputStreamReader; impor java.io.outputstream; impor java.net.socket; implementasi socketoperate kelas publik runnable {soket soket pribadi; // aliran input yang sesuai dengan soket yang diproses oleh utas ini bufferedReader br = null; String str = null; Konten String = NULL; InputStreamReader Reader = null; SocketOperate publik (soket soket) melempar ioException {this.socket = soket; reader = new InputStreamReader (this.socket.getInputStream (), "utf-"); BR = BufferedReader baru (pembaca); } @Override public void run () {coba {// Gunakan loop untuk terus membaca data yang dikirim oleh klien dari soket sementara (true) {content = readFromClient (); System.out.println (konten); if (content == null) {break; } OutputStream os = socket.getoutputStream (); os.write (("res, ok, <kelas tahun, xiao ming> ,,#" + "/n").getbytes("utf-")); os.flush ();}} catch (ioException e) {e.printstacktrace (); }} // Tentukan metode untuk membaca data klien string pribadi readFromClient () {coba {str = br.readline (); mengembalikan str; } //If an exception is caught, it means that the client corresponding to the socket has closed the catch (IOException e) { try {br.close();reader.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} } return null; }}Kode Klien:
PackageImport java.io.*; import java.net.*; kelas publik talkClient {public static void main (string args []) melempar unknownHostException, ioException {socket socket = new socket ("...",); printwriter os = new printwriter (socket.getoutsputStream ()); InputStreamReader (socket.getInputStream ())); int i =; while (socket.isconnected ()) {os.print ("beat ,,,,.,#"+"/N"); os.flush (); system.out.println ("client:"+i); System.out.plushln (); out.ut.println ("Client:"+i); System.out.println (); server looping os.close (); // Tutup aliran output soket adalah.close (); // tutup socket input stream socket.close (); // tutup soket}}Di atas adalah metode menggunakan Socket Communication Multi-Threaded dan Long Connections dalam proyek web Java yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang!