ตัวอย่างนี้แสดงให้เห็นถึงฟังก์ชั่นง่าย ๆ เท่านั้นและรหัสไม่เข้มงวด แต่อธิบายได้ว่าไคลเอ็นต์สามารถใช้รหัสง่าย ๆ ที่เชื่อมต่อกับเซิร์ฟเวอร์ได้อย่างไร
รหัสทดสอบสภาพแวดล้อมการรวบรวมและการรันภายใต้เครื่องมือ Eclipse ในตัวดังที่แสดงในรูปด้านล่าง:
client echoclient.java รหัส:
แพ็คเกจ com.zhengzz.echo; นำเข้า java.io.bufferedreader; นำเข้า java.io.ioexception; นำเข้า java.io.inputstreamreader; นำเข้า java.io.printwriter; นำเข้า java.net.socket; นำเข้า Java.net.unknownhostexception; Echoc {ซ็อกเก็ตส่วนตัว; IOException E) {E.PrintStackTrace ();}} ไคลเอ็นต์โมฆะสาธารณะ () {ลอง {bufferedReader br = ใหม่ bufferedReader (ใหม่ InputStreamReader (socket.getInputStream ()); จริง); println (br.readline ()); หาก linestr.equals ("bye#")) {break;}}} catch (ioexcept Main (String [] args) {new echoc (). client ();}}เซิร์ฟเวอร์ echoserver.java รหัส:
แพ็คเกจ com.zhengzz.echo; นำเข้า java.io.bufferedreader; นำเข้า java.io.ioexception; นำเข้า java.io.inputstreamreader; นำเข้า java.io.printwriter; นำเข้า Java.net.serversocket; นำเข้า Java.net.socket; Echos {Private Serversocket Serversocket; ซ็อกเก็ต = serversocket.accept (); System.out.println ("ไคลเอนต์:" + socket.getInetAddress () + ":" socket.getLocalport ()); )); ("--->" + linestr); gs) {new echos (). เซิร์ฟเวอร์ ();}}ผลการดีบักโดยตรงของฉันภายใต้เครื่องมือ Eclipse มีดังนี้:
ลองมาดูตัวอย่างของการสื่อสารซ็อกเก็ต Java ระดับ Helloword กระบวนการสื่อสาร:
ก่อนอื่นให้เริ่มด้านเซิร์ฟเวอร์และป้อนลูปที่ตายแล้วเพื่อฟังต่อไปว่ามีการร้องขอการเชื่อมต่อสำหรับพอร์ตหนึ่งหรือไม่ จากนั้นเรียกใช้ฝั่งไคลเอ็นต์ออกจากการร้องขอการเชื่อมต่อและเซิร์ฟเวอร์จะรับฟังคำขอและส่งข้อความการยอมรับกลับไปยังไคลเอนต์ ไปยังคำขออื่น ๆ ในวงที่ตายแล้ว หลังจากไคลเอนต์เข้าสู่สตริงให้กด ENTER เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์อ่านข้อมูลและตอบกลับข้อมูลไคลเอนต์ หลังจากดำเนินการตามคำขอในครั้งนี้เธรดที่เริ่มต้นจะหายไป หากลูกค้าได้รับข้อมูลส่งคืนนอกเหนือจาก "ตกลง" จะส่งคำขอการเชื่อมต่ออีกครั้งและส่งข้อมูลและเซิร์ฟเวอร์จะเริ่มเธรดอีกครั้งเพื่อให้การเชื่อมต่อตอบสนอง - - ไคลเอนต์ออกไปจนกว่าข้อมูลการส่งคืนที่ลูกค้าได้รับคือ "ตกลง"
ซอร์สโค้ดเซิร์ฟเวอร์:
com.defonds.socket.begin; ซ็อกเก็ต; เซิร์ฟเวอร์ = ใหม่เซิร์ฟเวอร์ (); ไคลเอ็นต์ได้รับการเชื่อมต่อซ็อกเก็ตไคลเอ็นต์ = serversocket.accept (); ); dataInputStream input = new datainputStream (socket.getInputStream ()); Data System.out "); // ส่งบรรทัดที่ป้อนโดยคีย์บอร์ดสตริง s = ใหม่ bufferedReader (ใหม่ inputStreamReader (system.in)). readline (); out.writeUtf (s); out.close (); input.close (); } catch (Exc Episode E) {System .out.println ("Server Run Exception:" + E.GetMessage ()); Exception E) {socket = null;ซอร์สโค้ดไคลเอนต์:
com.defonds.socket.begin; ซ็อกเก็ต; ไคลเอนต์ระดับสาธารณะ {สตริงสุดท้ายคงที่ ip_addr = "localhost"; // ที่อยู่เซิร์ฟเวอร์พอร์ต int สุดท้ายคงที่สาธารณะ = 12345; // หมายเลขพอร์ตเซิร์ฟเวอร์โมฆะสาธารณะคง ("ไคลเอนต์เริ่มต้น ... "); {// สร้างซ็อกเก็ตสตรีมและเชื่อมต่อกับหมายเลขพอร์ตที่ระบุบนซ็อกเก็ตโฮสต์ที่ระบุ = ซ็อกเก็ตใหม่ (IP_ADDR, พอร์ต); // ส่งข้อมูลไปยัง Server DataOfputStream OUT = ใหม่ DataOfputStream (Socket.GetOutputStream ()); readline (); ".Equals (ret)) {system.out.println (" ไคลเอน ) {System.out.println ("ข้อยกเว้นไคลเอนต์:" + e.getMessage ());} ในที่สุด {ถ้า (ซ็อกเก็ต! = null) {ลอง {socket.close (); ;หมายเหตุ: เมื่อสตรีมเอาต์พุตซ็อกเก็ตเขียนวิธีการข้อมูลคือ WriteUTF สตรีมอินพุตจะต้องใช้ readUtf เพื่ออ่านข้อมูลที่เกี่ยวข้อง มิฉะนั้นจะมีข้อยกเว้น eofexception