หลายครั้งในโครงการ Javaweb เราจำเป็นต้องใช้การสื่อสารซ็อกเก็ตเพื่อใช้งานฟังก์ชั่น เมื่อใช้ซ็อกเก็ตในเว็บเราจำเป็นต้องสร้างโปรแกรมผู้ฟังและเริ่มการฟังซ็อกเก็ตเมื่อโปรแกรมเริ่มต้น สถานการณ์แอปพลิเคชันของเราอยู่ในโครงการ Java ซึ่งต้องการอุปกรณ์ฮาร์ดแวร์ภายนอกในการสื่อสารผ่าน TCP เพื่อรับข้อมูลที่อัปโหลดโดยอุปกรณ์และตอบสนองต่อข้อมูล
มาดูรหัสการฟังเว็บ:
นำเข้า javax.servlet.servletContextEvent; นำเข้า Javax.servlet.servletContextListener; คลาสสาธารณะเข้าร่วม SoCetListener ใช้ ServletContextListener {ซ็อกเก็ตทรีเซ็กคีทอ่าน SocketThread.closesocketServer (); SocketThread.interrupt (); }} @Override เป็นโมฆะสาธารณะบริบท (servletContextEvent arg) {// วิธีการที่สร้างขึ้นอัตโนมัติ toDo stub stub ถ้า (null == socketThread) {// สร้างคลาสเธรดใหม่ socketThread = socketThread ใหม่ (null); // เริ่มเธรด SocketThread.start (); -สร้างกระทู้:
นำเข้า java.io.ioexception; นำเข้า java.net.serversocket นำเข้า java.net.socket; นำเข้า java.util.arraylist; นำเข้า java.util.list; socketthread ระดับสาธารณะขยายเธรด SocketThread สาธารณะ (Serversocket ServersCoket) {ลอง {ถ้า (null == Serversocket) {this.serversocket = new Serversocket (); System.out.println ("Socket Start"); }} catch (exception e) {system.out.println ("ข้อผิดพลาดของ socketthread การสร้างบริการซ็อกเก็ต"); E.PrintStackTrace (); }} โมฆะสาธารณะเรียกใช้ () {ในขณะที่ (จริง) {ลอง {if (serversocket == null) {break;} อื่นถ้า (serversocket.isclosed ()) {break;} ซ็อกเก็ตซ็อกเก็ต = serversocket.accept (); if (null! = ซ็อกเก็ต &&! socket.isclosed ()) {// กระบวนการที่ได้รับการยอมรับเธรดข้อมูล t = เธรดใหม่ (ซ็อกเก็ตใหม่ (ซ็อกเก็ต)); T.Start (); } else {break;}} catch (exception e) {system.out.println ("ข้อผิดพลาดในการสร้างบริการซ็อกเก็ตใน SocketThread"); E.PrintStackTrace (); }}} โมฆะสาธารณะ closesocketServer () {ลอง {ถ้า (null! = serversocket &&! serversocket.isclosed ()) {serversocket.close (); }} catch (ioexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); -การประมวลผลข้อมูลที่ได้รับ:
นำเข้า java.io.bufferedreader; นำเข้า java.io.ioexception; นำเข้า java.io.inputstreamreader; นำเข้า java.io.outputstream; นำเข้า java.net.socket; // อินพุตสตรีมที่สอดคล้องกับซ็อกเก็ตที่ประมวลผลโดยเธรด bufferedReader br = null; string str = null; เนื้อหาสตริง = null; InputStreamReader reader = null; ซ็อกเก็ตสาธารณะ (ซ็อกเก็ตซ็อกเก็ต) พ่น IOException {this.socket = ซ็อกเก็ต; reader = new InputStreamReader (this.socket.getInputStream (), "UTF-"); br = bufferedreader ใหม่ (ผู้อ่าน); } @Override โมฆะสาธารณะเรียกใช้ () {ลอง {// ใช้ลูปเพื่ออ่านข้อมูลที่ส่งโดยลูกค้าจากซ็อกเก็ตอย่างต่อเนื่องในขณะที่ (จริง) {content = readFromClient (); System.out.println (เนื้อหา); if (content == null) {break; } OutputStream OS = socket.getOutputStream (); OS.WRITE (("res, ok, <ชั้นปี, Xiao Ming> ,,#" + "/n").getBytes("utf-")); os.flush ();}} catch (ioexception e) {e.printstacktrace (); }} // กำหนดวิธีการอ่านข้อมูลลูกค้าสตริงส่วนตัว readFromClient () {ลอง {str = br.readline (); return str; } // หากมีข้อยกเว้นถูกจับนั่นหมายความว่าไคลเอนต์ที่สอดคล้องกับซ็อกเก็ตได้ปิดการจับ (ioexception e) {ลอง {br.close (); reader.close (); socket.close ();} catch (ioexception e) {// -รหัสลูกค้า:
PackageImport java.io.*; นำเข้า Java.net.*; คลาสสาธารณะ talkclient {โมฆะคงที่สาธารณะหลัก (สตริง args []) โยน unknownhostexception, ioexception {ซ็อกเก็ตซ็อกเก็ต = ซ็อกเก็ตใหม่ ("... ",); InputStreamReader (socket.getInputStream ())); int i =; ในขณะที่ (socket.isconnected ()) {os.print ("Beat ,,,,,,,#"+"/n"); os.flush (); system.out.println ("ลูกค้า:"+i); os.close (); // ปิดสตรีมเอาต์พุตซ็อกเก็ตคือ. close (); // ปิดซ็อกเก็ตอินพุต Socket.close (); // ปิดซ็อกเก็ต}}ข้างต้นเป็นวิธีการใช้การเชื่อมต่อการสื่อสารแบบหลายเธรดและการเชื่อมต่อที่ยาวนานในโครงการ Java Web ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!