1. ภาพรวม
คลาสซ็อกเก็ตเป็นคลาสพื้นฐานสำหรับ Java ในการดำเนินการ TCP ไคลเอนต์ คลาสนี้ใช้รหัสเพื่อสื่อสารผ่านสแต็ก TCP ในท้องถิ่นของระบบปฏิบัติการโฮสต์ วิธีการคลาสซ็อกเก็ตจะสร้างและทำลายการเชื่อมต่อและตั้งค่าตัวเลือกซ็อกเก็ตต่างๆ
คลาส Serversocket เป็นคลาสพื้นฐานสำหรับ Java ในการดำเนินการฝั่งเซิร์ฟเวอร์ คลาสนี้ทำงานบนเซิร์ฟเวอร์และรับฟังการเชื่อมต่อ TCP ขาเข้า เซิร์ฟเวอร์ซ็อกเก็ตแต่ละตัวฟังพอร์ตของเซิร์ฟเวอร์ เมื่อไคลเอนต์ของโฮสต์ระยะไกลพยายามเชื่อมต่อกับพอร์ตนี้เซิร์ฟเวอร์จะตื่นขึ้นมาและส่งคืนวัตถุซ็อกเก็ตปกติที่แสดงถึงซ็อกเก็ตระหว่างโฮสต์ทั้งสอง
2. TCP คืออะไร?
TCP เป็นโปรโตคอลการสื่อสารที่เน้นการเชื่อมต่อที่เชื่อถือได้ การสื่อสาร TCP แบ่งออกเป็นไคลเอนต์และเซิร์ฟเวอร์และวัตถุที่เกี่ยวข้องคือซ็อกเก็ตและเซิร์ฟเวอร์ Serversocket ตามลำดับ
เมื่อคอมพิวเตอร์ต้องการเชื่อมต่อกับคอมพิวเตอร์ระยะไกลเครื่องอื่นโปรโตคอล TCP ช่วยให้พวกเขาสามารถสร้างการเชื่อมต่อ: ลิงค์เสมือนจริงสำหรับการส่งและรับข้อมูล โปรโตคอล TCP มีหน้าที่รับผิดชอบในการรวบรวมแพ็คเก็ตข้อมูลและส่งตามลำดับที่เหมาะสมจากนั้นกลับอย่างถูกต้องหลังจากได้รับเมื่อสิ้นสุดการรับ เพื่อให้แน่ใจว่าแพ็กเก็ตข้อมูลมีความถูกต้องในระหว่างการส่ง TCP ใช้กลไกการส่งสัญญาณซ้ำ: เมื่อนิติบุคคลการสื่อสารส่งข้อความไปยังนิติบุคคลการสื่อสารอื่นจำเป็นต้องได้รับข้อมูลการยืนยันของเอนทิตีอื่น หากไม่ได้รับข้อมูลการยืนยันข้อมูลที่ส่งมาตอนนี้จะไม่พอใจอีกครั้ง
iii. การสื่อสาร TCP
1. ตัวสร้าง
คลาสซ็อกเก็ตใช้ซ็อกเก็ตไคลเอนต์และตัวสร้างสามารถระบุโฮสต์และพอร์ตที่คุณต้องการเชื่อมต่อ โฮสต์สามารถระบุได้ว่าเป็น inetaddress หรือสตริงและพอร์ตจะถูกระบุเป็นค่า int ระหว่าง 0 ถึง 65535
ซ็อกเก็ต s = ซ็อกเก็ตใหม่ ("127.0.0.1", 10001); // สร้างซ็อกเก็ตสตรีมและเชื่อมต่อกับหมายเลขพอร์ตที่ระบุบนโฮสต์ที่ระบุคลาส Serversocket ใช้ซ็อกเก็ตเซิร์ฟเวอร์ ซ็อกเก็ตเซิร์ฟเวอร์รอการร้องขอจะถูกส่งผ่านผ่านเครือข่ายโดยดำเนินการบางอย่างตามคำขอแล้วส่งคืนผลลัพธ์ไปยังผู้ร้องขอ
Serversocket SS = ใหม่ Serversocket (10001); // สร้างซ็อกเก็ตเซิร์ฟเวอร์ที่ถูกผูกไว้กับพอร์ตเฉพาะ
2. ตัวอย่าง: การคัดลอกไฟล์ TCP
ลูกค้า:
คลาสสาธารณะ clientDemo {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น unknownhostexception, ioexception {ซ็อกเก็ต s = ซ็อกเก็ตใหม่ ("127.0.0.1", 10004); bufferedreader buf = bufferedreader ใหม่ line = null;/*printwriter out = new printwriter (s.getOutputStream (), จริง); ในขณะที่ ((line = buf.readline ())! = null) {out.println (บรรทัด); } */bufferedWriter out = new BufferedWriter (ใหม่ OutputStreamWriter (S.GetOutputStream ())); ในขณะที่ ((line = buf.readline ())! = null) {out.write (line); out.newline (); out.flush ();} s.shutdownoutput (); bufferedreader ใน = bufferedreader ใหม่ str = in.readline (); system.out.println (str); s.close (); buf.close ();}}ด้านเซิร์ฟเวอร์:
คลาสสาธารณะ ServerDemo {โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {Serversocket SS = Serversocket ใหม่ (10004); ซ็อกเก็ต s = ss.accept (); bufferedreader ใน = bufferedreader ใหม่ FileWriter ("C: //users//administrator//desktop//2.txt"), จริง); ในขณะที่ ((line = in.readline ())! = null) {buf.println (บรรทัด); }*/bufferedWriter buf = new BufferedWriter (ใหม่ fileWriter ("C: //USERS//administrator//desktop//2.txt")); ในขณะที่ (line = in.readline ())! = null) {buf.write PrintWriter (s.getOutputStream (), true); out.println ("ถ่ายโอนประสบความสำเร็จ!"); ss.close (); buf.close ();}}4. แอปพลิเคชันของซ็อกเก็ตในการท่องเว็บ
เราสามารถเขียนฝั่งเซิร์ฟเวอร์ใน Eclipse แล้วเข้าถึงโดยใช้เบราว์เซอร์
เช่นรหัสฝั่งเซิร์ฟเวอร์คือ:
SocketServer ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {Serversocket Server = ใหม่ Serversocket (11000); Socket Client = Server.accept (); PrintWriter out = ใหม่ printwriter (client.getOutputStream (), true); out.println ("สวัสดี!"); Server.close (); -จากนั้นเปิดเบราว์เซอร์ IE ให้ป้อน http://192.168.1.120:11000/ ในที่อยู่ (192.168.1.120 เป็นที่อยู่ IP ท้องถิ่น) และผลลัพธ์คือ
ในแอปพลิเคชันปกติเบราว์เซอร์จะออกคำขอไปยังเซิร์ฟเวอร์ Tomacat เพื่อรับทรัพยากรเช่นภาพหน้าเว็บ Tomca เป็นซอฟต์แวร์ฝั่งเซิร์ฟเวอร์ที่เขียนด้วย Java
ตอนนี้เราเขียนฝั่งเซิร์ฟเวอร์เป็น:
SocketServer ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {Serversocket Server = ใหม่ Serversocket (11000); Socket Client = Server.accept (); PrintWriter out = ใหม่ printwriter (client.getOutputStream (), true); bufferedReader ใน = new bufferedReader (ใหม่ inputStreamReader (client.getInputStream ())); สตริงบรรทัด = null; ในขณะที่ ((line = in.readline ())! = null) system.out.println (บรรทัด); out.println ("สวัสดี!"); Server.close (); -จากนั้นเมื่อเข้าถึงกับเบราว์เซอร์คุณจะเห็นว่าข้อมูลส่วนหัวคำขอที่ส่งโดยเบราว์เซอร์ (ไคลเอนต์) ไปยังเซิร์ฟเวอร์คือ:
การใช้หลักการข้างต้นเราสามารถเขียนซอฟต์แวร์ด้านเบราว์เซอร์ (ไคลเอนต์) คล้ายกับ IE ด้วยตัวเอง ก่อนอื่นเพิ่มทรัพยากร demo.html ลงในไดเรกทอรีการติดตั้งของ Tomcat c: /apache-tomcat-7.0.62/webapps/myweb จากนั้นเขียนไคลเอนต์รหัสมีดังนี้:
คลาสสาธารณะ clientdemo {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น unknownhostexception, ioexception {ซ็อกเก็ต s = ซ็อกเก็ตใหม่ ("192.168.1.120", 8080); printwriter out = printwriter ใหม่ http/1.1 "); out.println (" ยอมรับ:*/*"); out.println (" โฮสต์: 192.168.1.120:11000"); inputStreamReader (s.getInputStream ())); สตริงบรรทัด = null; // ส่งคืนไฟล์ตอบกลับของเซิร์ฟเวอร์ในขณะที่ ((line = in.readline ())! = null) {system.out.println (บรรทัด);} s.close ();}}};ถัดไปเริ่มต้น Tomcat นั่นคือดับเบิลคลิกที่ไฟล์ startup.bat ใน c: /apache-tomcat-7.0.62/bin จากนั้นเรียกใช้รหัสไคลเอนต์ด้านบนและคุณสามารถดูข้อมูลการตอบกลับที่ส่งคืนโดย Tomacat:
สรุป
ข้างต้นเป็นตัวอย่างโค้ดที่สมบูรณ์ของการสื่อสาร TCP ในบทความนี้เกี่ยวกับการเขียนโปรแกรมเครือข่าย Java และฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงเว็บไซต์นี้ต่อไปได้:
พื้นฐานของการเขียนโปรแกรมเครือข่าย Java: การสื่อสารทางเดียว
รหัสตัวอย่างสำหรับการใช้งานการสื่อสารซ็อกเก็ตในการเขียนโปรแกรม Java MultithReaded
คำอธิบายโดยละเอียดเกี่ยวกับรหัสของการสื่อสารเธรดผู้ผลิตโมเดลผู้บริโภคและกลไกการตื่นนอนของ Java Multi-Threaded
หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!