สร้างเซิร์ฟเวอร์เครือข่ายในภาษา Java เพื่อรับรู้การสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์และตระหนักว่าไคลเอนต์มีเธรดอิสระและไม่รบกวนกันและกัน
ขั้นตอนพื้นฐานสำหรับการใช้มัลติเธรดเพื่อตระหนักถึงการสื่อสารระหว่างเซิร์ฟเวอร์และมัลติเธรด
เซิร์ฟเวอร์ฝั่งเซิร์ฟเวอร์. java
การทดสอบแพ็คเกจ concurrent.socket; นำเข้า Java.io.*; นำเข้า java.net.inetaddress; นำเข้า java.net.serversocket; นำเข้า java.net.socket; /*** สร้างโดย Dong เมื่อวันที่ 15-6-22 * การสื่อสารของซ็อกเก็ตตามโปรโตคอล TCP ใช้การเข้าสู่ระบบผู้ใช้* ฝั่งเซิร์ฟเวอร์*/เซิร์ฟเวอร์ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ลอง {// 1 สร้างซ็อกเก็ตฝั่งเซิร์ฟเวอร์นั่นคือ Serversocket ระบุพอร์ตที่ถูกผูกไว้และฟังพอร์ตนี้ Serversocket Serversocket = Serversocket ใหม่ (8888); ซ็อกเก็ตซ็อกเก็ต = null; // บันทึกจำนวนลูกค้า int count = 0; System.out.println ("*** เซิร์ฟเวอร์กำลังจะเริ่มต้นรอลิงค์ของลูกค้า ***"); // ลูปฟังเพื่อรอลิงค์ของลูกค้าในขณะที่ (จริง) {// การเรียกใช้วิธีการยอมรับ () เพื่อเริ่มการฟังรอลิงก์ของลูกค้าของลูกค้า = serversocket.accept (); // การสร้างเธรดใหม่ ServerThread ServerThread = ใหม่ ServerTHread (ซ็อกเก็ต); // การเริ่มต้นเธรดเซิร์ฟเวอร์ start.start (); นับ ++; // ค้นหาจำนวนไคลเอนต์ System.out.println ("จำนวนลูกค้า:" + นับ); ที่อยู่ inetAddress = socket.getInetAddress (); System.out.println ("IP ของไคลเอนต์ปัจจุบัน:" + address.getHostaddress ()); }} catch (ioexception e) {e.printstacktrace (); - คลาสการประมวลผลเธรดฝั่งเซิร์ฟเวอร์ Serverthread.java
การทดสอบแพ็คเกจ concurrent.socket; นำเข้า Java.io.*; นำเข้า java.net.socket; /*** สร้างโดย Dong เมื่อวันที่ 15-6-22 * คลาสการประมวลผลเธรดด้านเซิร์ฟเวอร์*/คลาสสาธารณะ ServerThread ขยายเธรด {// ซ็อกเก็ตซ็อกเก็ตซ็อกเก็ตซ็อกเก็ต = null; ServerThread สาธารณะ (ซ็อกเก็ตซ็อกเก็ต) {this.socket = ซ็อกเก็ต; } // การดำเนินการที่ดำเนินการโดยเธรดตอบสนองต่อการร้องขอของลูกค้าเป็นโมฆะสาธารณะ Run () {inputStream คือ = null; InputStreamReader ISR = NULL; bufferedReader br = null; OutputStream OS = NULL; PrintWriter PW = NULL; ลอง {// รับกระแสอินพุตและอ่านข้อมูลของลูกค้าคือ = socket.getInputStream (); ISR = new InputStreamReader (IS); // แปลงสตรีมไบต์เป็นสตรีมอักขระ BR = ใหม่ bufferedReader (ISR); // เพิ่มข้อมูลสตริงบัฟเฟอร์ = null; // loop การอ่านข้อมูลในขณะที่ ((info = br.readline ())! = null) {system.out.println ("ฉันเป็นเซิร์ฟเวอร์และลูกค้ากล่าวว่า:" +ข้อมูล); } socket.shutdownInput (); // ปิดสตรีมอินพุต // รับกระแสเอาต์พุตเพื่อตอบสนองต่อคำขอของลูกค้า OS = socket.getOutputStream (); PW = New PrintWriter (OS); // บรรจุเป็นสตรีมพิมพ์ pw.write ("ยินดีต้อนรับ"); pw.flush (); // แคชเอาท์พุท} catch (ioexception e) {e.printstacktrace (); } ในที่สุด {ลอง {// ปิดทรัพยากรถ้า (pw! = null) pw.close (); if (os! = null) os.close (); ถ้า (คือ! = null) is.close (); if (br! = null) br.close (); ถ้า (ซ็อกเก็ต! = null) socket.close (); } catch (ioexception e) {e.printstacktrace (); - client.java
การทดสอบแพ็คเกจ concurrent.socket; นำเข้า Java.io.*; นำเข้า java.net.socket; /*** สร้างโดย Dong เมื่อวันที่ 15-6-22 * ไคลเอนต์*/ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ลอง {// 1 สร้างซ็อกเก็ตไคลเอนต์ระบุหมายเลขพอร์ตเซิร์ฟเวอร์และซ็อกเก็ตซ็อกเก็ตที่อยู่ = ซ็อกเก็ตใหม่ ("localhost", 8888); // 2. รับสตรีมเอาท์พุทและส่งข้อมูลไปยังเซิร์ฟเวอร์ OutputStream OS = Socket.GetOutputStream (); // byte output stream printwriter pw = new printwriter (OS); // ห่อกระแสเอาต์พุตเป็นสตรีมการพิมพ์ pw.write ("ชื่อผู้ใช้: ทอม; รหัสผ่าน: 456"); pw.flush (); Socket.shutdownoutput (); // ปิดกระแสเอาต์พุตอินพุตสตรีมคือ = socket.getInputStream (); InputStreamReader ISR = ใหม่ inputStreamReader (IS); bufferedReader br = new bufferedReader (ISR); สตริงข้อมูล = null; // อ่านในขณะที่ ((info = br.readline ())! = null) {system.out.println ("ฉันเป็นไคลเอนต์: เซิร์ฟเวอร์พูดว่า:" + ข้อมูล); } br.close (); is.close (); isr.close (); pw.close (); os.close (); Socket.close (); } catch (ioexception e) {e.printstacktrace (); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น