เมื่อเราต้องการเชื่อมต่อกับเซิร์ฟเวอร์ผ่านเครือข่ายโดยใช้ TCP/IP ใน Java เราจำเป็นต้องสร้างวัตถุ java.net.Socket และเชื่อมต่อกับเซิร์ฟเวอร์ หากคุณต้องการใช้ Java NIO คุณสามารถสร้างออบเจ็กต์ SocketChannel ใน Java NIO ได้
สร้างซ็อกเก็ต
โค้ดตัวอย่างต่อไปนี้เชื่อมต่อกับพอร์ต 80 บนเซิร์ฟเวอร์ด้วยที่อยู่ IP 78.64.84.171 เซิร์ฟเวอร์นี้คือเว็บเซิร์ฟเวอร์ของเรา (www.VeVB.COm) และพอร์ต 80 คือพอร์ตบริการบนเว็บ
คัดลอกรหัสรหัสดังต่อไปนี้:
ซ็อกเก็ต ซ็อกเก็ต = ซ็อกเก็ตใหม่ ("78.46.84.171", 80);
นอกจากนี้เรายังสามารถใช้ชื่อโดเมนแทนที่อยู่ IP ได้ดังตัวอย่างต่อไปนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
ซ็อกเก็ต ซ็อกเก็ต = ซ็อกเก็ตใหม่ ("VeVB.COm", 80);
ซ็อกเก็ตส่งข้อมูล
ในการส่งข้อมูลผ่าน Socket เราจำเป็นต้องรับเอาต์พุตสตรีมของ Socket (OutputStream) โดยมีโค้ดตัวอย่างดังนี้
คัดลอกรหัสรหัสดังต่อไปนี้:
ซ็อกเก็ต ซ็อกเก็ต = ซ็อกเก็ตใหม่ ("VeVB.COm", 80);
OutputStream out = socket.getOutputStream();
out.write("ข้อมูลบางส่วน".getBytes());
ออก.ล้าง();
ออก.ปิด();
ซ็อกเก็ต.ปิด();
รหัสนั้นง่ายมาก แต่ถ้าคุณต้องการส่งข้อมูลไปยังเซิร์ฟเวอร์ผ่านเครือข่าย คุณต้องไม่ลืมที่จะเรียกใช้เมธอด flush() การใช้งาน TCP/IP พื้นฐานของระบบปฏิบัติการจะใส่ข้อมูลลงในบล็อกแคชข้อมูลที่ใหญ่กว่าก่อน และขนาดของบล็อกแคชจะถูกปรับให้เข้ากับขนาดแพ็คเก็ต TCP/IP (หมายเหตุผู้แปล: การเรียกเมธอด flush() จะเขียนข้อมูลลงแคชของระบบปฏิบัติการเท่านั้น และไม่รับประกันว่าข้อมูลจะถูกส่งทันที)
ซ็อกเก็ตอ่านข้อมูล
ในการอ่านข้อมูลจาก Socket เราจำเป็นต้องรับอินพุตสตรีมของ Socket (InputStream) โดยมีโค้ดดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
ซ็อกเก็ต ซ็อกเก็ต = ซ็อกเก็ตใหม่ ("VeVB.COm", 80);
InputStream ใน = socket.getInputStream();
ข้อมูล int = in.read();
//...อ่านข้อมูลเพิ่มเติม...
ใน.ปิด();
ซ็อกเก็ต.ปิด();
รหัสไม่ซับซ้อน แต่ควรสังเกตว่าการอ่านข้อมูลจากสตรีมอินพุตของซ็อกเก็ตไม่ได้อ่านไฟล์ เมธอด read() จะถูกเรียกจนกระทั่ง -1 ถูกส่งกลับ เนื่องจากสำหรับซ็อกเก็ตเฉพาะเมื่อเซิร์ฟเวอร์เท่านั้น การเชื่อมต่อถูกปิด สตรีมอินพุตของซ็อกเก็ตจะส่งกลับ -1 แต่ในความเป็นจริงแล้ว เซิร์ฟเวอร์ไม่ได้ปิดการเชื่อมต่อต่อไป สมมติว่าเราต้องการส่งคำขอหลายรายการผ่านการเชื่อมต่อเดียว การปิดการเชื่อมต่อในกรณีนี้คงเป็นเรื่องงี่เง่า
ดังนั้นเมื่ออ่านข้อมูลจาก Socket input stream เราต้องทราบจำนวนไบต์ที่จะอ่าน ซึ่งสามารถทำได้โดยให้เซิร์ฟเวอร์บอกข้อมูลว่ามีการส่งไปกี่ไบต์ หรือโดยการตั้งค่าอักขระพิเศษที่ส่วนท้ายของข้อมูล มีการใช้วิธีมาร์กอัป
ปิดซ็อกเก็ต
หลังจากใช้ Socket เราต้องปิด Socket และตัดการเชื่อมต่อจากเซิร์ฟเวอร์ หากต้องการปิด Socket คุณจะต้องเรียกใช้เมธอด Socket.close() เท่านั้น รหัสจะเป็นดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
ซ็อกเก็ต ซ็อกเก็ต = ซ็อกเก็ตใหม่ ("VeVB.COm", 80);
ซ็อกเก็ต.ปิด();
(จบข้อความฉบับเต็ม)