ใน Java เราสามารถมีหลายวิธีในการส่งและรับข้อมูล วิธีการบางอย่างอยู่ใกล้กับชั้นล่างและปัญหาบางอย่างจำเป็นต้องได้รับการแก้ไขโดยโปรแกรมเมอร์เองในขณะที่บางวิธีค่อนข้างสูงในนามธรรมและสามารถใช้งานได้อย่างสะดวก วิธีการประมวลผลข้อมูลเหล่านี้มาจากต่ำถึงสูงตามระดับนามธรรม:
1. การเข้ารหัสด้วยตนเอง: ใช้การดำเนินการบิตเพื่อเข้ารหัสและแยกวิเคราะห์ทีละตัว
2. ใช้สตรีมเพื่อเข้ารหัสโดยอัตโนมัติ: ใช้ OutputStream และ ByTeArrayOutputStream ร่วมกัน
3. การทำให้เป็นอนุกรม: ใส่ข้อมูลลงในวัตถุข้อมูลทำให้เป็นอนุกรมวัตถุโดยตรงและส่ง
มันสะดวกมากในการใช้งาน แต่คุณต้องใส่ใจกับการสูญเสียประสิทธิภาพและผู้รับควรใช้ Java ด้วย
4.RMI: ส่งการโทรทั้งหมดไปยังวิธีการและใช้การโทรระยะไกลโดยตรงของวิธีการ
ในวิธีระดับต่ำสุด 1 เราจำเป็นต้องแก้ปัญหาพื้นฐานบางอย่างด้วยตนเอง:
1. การส่งจำนวนเต็ม: พิจารณาว่ามันเป็นปลายหางขนาดใหญ่หรือปลายหางเล็ก ๆ , ไม่ได้ลงนามหรือจำนวนเต็มที่ลงนาม
2. ส่งสตริง: ควรพิจารณาปัญหาการเข้ารหัส
3. ประเภทที่ไม่มีความยาว จำกัด เช่นจำนวนเต็มขนาดใหญ่: เพื่อเข้ารหัสเฟรมเฟรมแยกความแตกต่างแต่ละเฟรมโดยคั่นหรือบิตความยาว
มัลติคาสต์และออกอากาศ
เราสามารถคัดลอกข้อมูลไปยังผู้รับแต่ละคนได้ แต่สิ่งนี้อาจไม่มีประสิทธิภาพมาก
มีเพียงซ็อกเก็ต UDP เท่านั้นที่อนุญาตให้ออกอากาศและมัลติคาสต์ ความแตกต่างระหว่างทั้งสองคือการออกอากาศจะถูกส่งไปยังโฮสต์ที่เข้าถึงได้ทั้งหมดบนเครือข่ายและระบบปฏิบัติการบางระบบอาจไม่อนุญาตให้ผู้ใช้ทั่วไปทำการดำเนินการออกอากาศ ในขณะที่มัลติคาสต์จะถูกส่งไปยังโฮสต์ที่สนใจเท่านั้น โดยเฉพาะอย่างยิ่งมันเรียก joingroup () ของ multicastsocket เพื่อเข้าร่วมโฮสต์ของกลุ่มมัลติคาสต์
Public Class MulticastreceVertest {โมฆะสาธารณะคงที่หลัก (String [] args) โยนข้อยกเว้น {ที่อยู่ inetaddress สุดท้าย = inetaddress.getByName ("224.1.1.1"); พอร์ต int สุดท้าย = 45599; สำหรับ (int i = 0; i <5; i ++) {เธรดใหม่ ("เธรด #"+i) {@Override โมฆะสาธารณะเรียกใช้ () {ลอง {MulticastSocket Sock = New MulticastSocket (พอร์ต); Sock.joingRoup (ที่อยู่); ไบต์ [] msg = ไบต์ใหม่ [256]; แพ็คเก็ต DataGrampacket = DataGampacket ใหม่ (msg, msg.length); Sock.receive (แพ็คเก็ต); System.out.println (thread.currentthread (). getName () + "รับ:" + สตริงใหม่ (packet.getData ())); } catch (ioexception e) {e.printstacktrace (); } } } }.เริ่ม(); } thread.sleep (2000); Multicastsocket Sock = New Multicastsocket (); Sock.settimetolive (32); ไบต์ [] msg = "hellomulticast" .getBytes (); DataGrampacket Packet = DataGampacket ใหม่ (msg, msg.length, ที่อยู่, พอร์ต); Sock.Send (แพ็คเก็ต); System.out.println ("ส่งข้อความ"); -