1. แนวคิดเครือข่ายพื้นฐาน
ก่อนอื่นให้ชี้แจงแนวคิด: การเขียนโปรแกรมเครือข่าย! = การเขียนโปรแกรมเว็บไซต์การเขียนโปรแกรมเครือข่ายโดยทั่วไปเรียกว่าการเขียนโปรแกรม TCP/IP
2. โปรโตคอลการสื่อสารเครือข่ายและอินเทอร์เฟซ
3. แนวคิดการจัดระเบียบการสื่อสารโปรโตคอล
4. โมเดลอ้างอิง
V. โปรโตคอล IP
คอมพิวเตอร์ของทุกคนมีที่อยู่ IP ที่ไม่ซ้ำกันเพื่อให้ข้อความแสดงข้อผิดพลาดจะไม่ถูกส่งเมื่อสื่อสารซึ่งกันและกัน
ที่อยู่ IP แบ่งออกเป็นสี่ส่วนโดยหนึ่งจุด ที่อยู่ IP ภายในคอมพิวเตอร์แสดงโดยสี่ไบต์ หนึ่งไบต์แสดงถึงเซ็กเมนต์และจำนวนสูงสุดที่แสดงโดยแต่ละไบต์สามารถเข้าถึง 255 เท่านั้น
VI. โปรโตคอล TCP และโปรโตคอล UDP
TCP และ UDP ตั้งอยู่บนเลเยอร์เดียวกันและทั้งสองขึ้นอยู่กับชั้น IP เนื่องจากคอมพิวเตอร์สองเครื่องมีที่อยู่ IP ที่แตกต่างกันคอมพิวเตอร์สองเครื่องจึงสามารถแยกแยะได้และสามารถพูดคุยกันได้ โดยทั่วไปมีสองวิธีในการพูดคุย: ครั้งแรกคือ TCP และที่สองคือ UDP TCP เป็นการเชื่อมต่อที่เชื่อถือได้ TCP ก็เหมือนกับการโทรออก คุณต้องโทรหาอีกฝ่ายก่อนและรอให้อีกฝ่ายตอบกลับก่อนที่จะคุยกับอีกฝ่าย นั่นคือคุณต้องยืนยันว่าคุณสามารถส่งข้อความก่อนส่งข้อความ TCP อัปโหลดสิ่งที่เชื่อถือได้ ตราบใดที่การเชื่อมต่อถูกจัดตั้งขึ้นในสองเครื่องข้อมูลที่ส่งบนเครื่องจะถูกส่งไปยังเครื่องของอีกฝ่ายอย่างแน่นอน UDP เป็นเหมือนการส่งโทรเลขและจะทำถ้ามันถูกส่งออกไป ไม่สำคัญว่าอีกฝ่ายจะได้รับหรือไม่ดังนั้น UDP จึงไม่น่าเชื่อถือ แม้ว่า TCP จะส่งข้อมูลได้อย่างน่าเชื่อถือ แต่ก็จะถูกส่งช้า UDP ส่งข้อมูลไม่น่าเชื่อถือ แต่มันถูกส่งอย่างรวดเร็ว
7. การเขียนโปรแกรมซ็อกเก็ต
โดยทั่วไปการเขียนโปรแกรมเครือข่ายเรียกว่าการเขียนโปรแกรมซ็อกเก็ตและซ็อกเก็ตหมายถึง "ซ็อกเก็ต" เป็นภาษาอังกฤษ
ติดตั้งซ็อกเก็ตบนคอมพิวเตอร์ทั้งสองเครื่องจากนั้นเสียบปลายทั้งสองของสายเคเบิลเข้ากับซ็อกเก็ตของคอมพิวเตอร์สองเครื่องเพื่อให้คอมพิวเตอร์สองเครื่องสามารถสร้างการเชื่อมต่อได้ ซ็อกเก็ตนี้เป็นซ็อกเก็ต
เนื่องจากพวกเขาสามารถสื่อสารกันได้ฉันจึงบอกว่าคุณเป็นเซิร์ฟเวอร์ของฉัน แต่ในแง่ตรรกะฉันควรส่งสิ่งของให้คุณก่อนแล้วคุณจะจัดการและส่งต่อพวกเขา ดังนั้นคุณจึงเรียกมันว่าเซิร์ฟเวอร์ แต่ในแง่เทคนิคมีเพียง TCP เท่านั้นที่จะแบ่งเซิร์ฟเวอร์และไคลเอนต์ สำหรับ UDP ในความหมายที่เข้มงวดไม่มีเซิร์ฟเวอร์และไคลเอนต์ที่เรียกว่า ซ็อกเก็ตของเซิร์ฟเวอร์ TCP เรียกว่า Serversocket และซ็อกเก็ตของไคลเอนต์เรียกว่าซ็อกเก็ต
เมื่อคอมพิวเตอร์สองเครื่องเชื่อมต่อซึ่งกันและกันคุณต้องทราบที่อยู่ IP ของพวกเขาก่อน แต่การให้ที่อยู่ IP เท่านั้นไม่เพียงพอ คุณต้องมีหมายเลขพอร์ตของการเชื่อมต่อนั่นคือแอปพลิเคชันใดที่จะเชื่อมต่อ
หมายเลขพอร์ตใช้เพื่อแยกแอพพลิเคชั่นที่แตกต่างกันบนเครื่อง หมายเลขพอร์ตมี 2 ไบต์ภายในคอมพิวเตอร์ มีหมายเลขพอร์ตสูงสุด 65536 บนเครื่อง แอปพลิเคชันสามารถครอบครองหมายเลขพอร์ตได้หลายหมายเลข หากหมายเลขพอร์ตถูกครอบครองโดยแอปพลิเคชันแอปพลิเคชันอื่น ๆ จะไม่สามารถใช้หมายเลขพอร์ตนี้ได้อีกต่อไป โปรดจำไว้ว่าหากโปรแกรมที่เราเขียนควรครอบครองหมายเลขพอร์ตหากต้องการครอบครองหมายเลขพอร์ตที่สูงกว่า 1024 อย่าครอบครองหมายเลขพอร์ตต่ำกว่า 1,024 เนื่องจากระบบอาจได้รับการขอร้องได้ตลอดเวลา หมายเลขพอร์ตนั้นแบ่งออกเป็นพอร์ต TCP และพอร์ต UDP พอร์ต TCP 8888 และพอร์ต UDP 8888 เป็นพอร์ตที่แตกต่างกันสองพอร์ต มีพอร์ต 65536 TCP และพอร์ต UDP
8. รูปแบบการสื่อสารซ็อกเก็ต TCP
9. ตัวอย่างการใช้ซ็อกเก็ต
เซิร์ฟเวอร์
นำเข้า java.net.*; นำเข้า Java.io.*; Public Class TestServersocket {โมฆะคงที่สาธารณะหลัก (String args []) โยนข้อยกเว้น {Serversocket SS = Serversocket ใหม่ (6666); /* เมื่อสร้างวัตถุ Serversocket มักจะถูกกำหนดหมายเลขพอร์ต ความหมายคือการใช้หมายเลขพอร์ตที่วัตถุ Serversocket ใหม่ควรใช้และหมายเลขพอร์ตใดที่จะฟังการเชื่อมต่อของลูกค้า ดังนั้นความหมายของการระบุหมายเลขพอร์ตคือการบอกคอมพิวเตอร์ว่าวัตถุ Serversocket ฟังการเชื่อมต่อของลูกค้า */ * ฝั่งเซิร์ฟเวอร์ได้รับคำขอการเชื่อมต่อของลูกค้าอย่างต่อเนื่องดังนั้นการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์โดยทั่วไปจะเป็นลูปที่ตายแล้วและทำงานอย่างไม่สิ้นสุด */ ในขณะที่ (จริง) {ซ็อกเก็ต s = s.accept (); /*เรียกใช้เมธอด accept () ทางฝั่งเซิร์ฟเวอร์เพื่อยอมรับวัตถุการเชื่อมต่อของลูกค้า วิธีการยอมรับ () เป็นวิธีการบล็อก ฉันรออย่างโง่เขลาว่าไคลเอนต์ใช้สำหรับการเชื่อมต่อหรือไม่ จากนั้นซ็อกเก็ตซ็อกเก็ตที่ฝั่งเซิร์ฟเวอร์จะสร้างการเชื่อมต่อกับซ็อกเก็ตซ็อกเก็ตบนไคลเอนต์ * / /* ว่าไคลเอนต์สามารถเชื่อมต่อกับฝั่งเซิร์ฟเวอร์ขึ้นอยู่กับว่าฝั่งเซิร์ฟเวอร์ยอมรับคำขอการเชื่อมต่อของลูกค้าหรือไม่ หากไคลเอนต์ยอมรับคำขอการเชื่อมต่อให้ติดตั้งซ็อกเก็ตซ็อกเก็ตบนฝั่งเซิร์ฟเวอร์เพื่อสร้างการเชื่อมต่อกับไคลเอนต์ผ่านซ็อกเก็ตนี้และสื่อสารกัน */ system.out.println ("ไคลเอนต์เชื่อมต่อ!"); /* ใช้สตรีม InputStream เพื่อรับข้อมูลที่ส่งจากไคลเอนต์และใช้สตรีมข้อมูล datainputStream เพื่อประมวลผลข้อมูลที่ได้รับ*/ datainputStream dis = ใหม่ datainputStream (s.getInputStream ()); /* ใช้ readUtf (วิธีการอ่านข้อมูลทั้งหมดที่ได้รับและเก็บไว้ในตัวแปร str เพื่ออ่านวิธีการ readutf () ยังเป็นวิธีการบล็อกมันจะรออย่างโง่เขลาให้ลูกค้าส่งข้อมูลแล้วอ่านข้อมูลที่ได้รับหากลูกค้าไม่ได้เขียนบางสิ่งบางอย่าง โปรแกรมถูกปิดกั้นเพื่อให้ลูกค้าอื่นไม่สามารถเชื่อมต่อได้เพราะหากลูกค้าอื่นต้องการเชื่อมต่อกับเซิร์ฟเวอร์มันจะต้องเรียกวิธีการที่ Accept () บนฝั่งเซิร์ฟเวอร์ ในการอ่านข้อมูล ซ็อกเก็ตไคลเอนต์
นำเข้า java.net.*; นำเข้า Java.io.*; Public Class TestClientSocket {โมฆะคงที่สาธารณะหลัก (สตริง args []) โยนข้อยกเว้น {ซ็อกเก็ต s = ซ็อกเก็ตใหม่ ("127.0.0.1", 6666); /*ไคลเอ็นต์ใช้เพื่อเชื่อมต่อกับฝั่งเซิร์ฟเวอร์* / /*หลังจากเชื่อมต่อกับฝั่งเซิร์ฟเวอร์คุณสามารถส่งออกข้อมูลไปยังฝั่งเซิร์ฟเวอร์และรับข้อมูลที่ส่งคืนจากฝั่งเซิร์ฟเวอร์และรับข้อมูลเอาต์พุตข้อมูลและรับข้อมูลการส่งคืน ทั้งหลักการอินพุตและเอาต์พุตต้องใช้เพื่อประมวลผลข้อมูล*//*นี่คือข้อมูลเอาต์พุตเอาต์พุตเอาต์พุตเอาต์พุตไปยังฝั่งเซิร์ฟเวอร์*/ outputstream OS = S.GetOutputStream (); dataOrtputStream dos = new dataOutputStream (OS); thread.sleep (30000);/*ไคลเอ็นต์นอนหลับเป็นเวลา 30 วินาทีก่อนที่จะส่งข้อมูลไปยังเซิร์ฟเวอร์*/ dos.writeUtf ("สวัสดีเซิร์ฟเวอร์!"); -ไคลเอนต์ร้องขอการเชื่อมต่อกับเซิร์ฟเวอร์ผ่านพอร์ต 6666 หลังจากเซิร์ฟเวอร์ยอมรับคำขอการเชื่อมต่อของไคลเอ็นต์จะติดตั้งซ็อกเก็ตบนเซิร์ฟเวอร์แล้วเชื่อมต่อซ็อกเก็ตนี้กับซ็อกเก็ตของไคลเอ็นต์เพื่อให้เซิร์ฟเวอร์สามารถสื่อสารกับไคลเอนต์ได้ เมื่อไคลเอนต์อื่นใช้สำหรับการเชื่อมต่อหลังจากเซิร์ฟเวอร์ยอมรับซ็อกเก็ตอื่นจะถูกติดตั้งเพื่อเชื่อมต่อกับซ็อกเก็ตของไคลเอนต์