في Java ، يمكن أن يكون لدينا العديد من الطرق لإرسال وتلقي البيانات. تكون بعض الطرق أقرب إلى الطبقة السفلية ، ويجب حل بعض المشكلات من قبل المبرمجين أنفسهم ، في حين أن بعض الطرق مرتفعة نسبيًا في التجريد ويمكن استخدامها بشكل مريح للغاية. طرق معالجة بيانات المعالجة هذه من منخفضة إلى عالية وفقًا لمستوى التجريد:
1. الترميز اليدوي: استخدم عمليات بت لتشفير وتحليل واحد تلو الآخر.
2. استخدم التدفقات لتشفيرها تلقائيًا: استخدم OutputStream و ByteArrayoutputStream مجتمعة.
3. التسلسل: ضع البيانات في كائن بيانات ، وقم بتسلسل الكائن مباشرة وأرسله.
إنه مناسب جدًا للاستخدام ، لكنك تحتاج إلى الانتباه إلى فقدان الكفاءة ويجب أن يستخدم المتلقي أيضًا Java.
4.RMI: أرسل جميع المكالمات إلى الطريقة وتنفيذ المكالمة عن بُعد للطريقة مباشرة.
في أدنى مستوى المستوى 1 ، نحتاج إلى حل بعض المشكلات الأساسية بأنفسنا:
1. إرسال عدد صحيح: فكر فيما إذا كانت نهاية التيل كبيرة أو نهاية التيل صغيرة ، أو عدد صحيح غير موقّع أو موقّع.
2. إرسال السلاسل: ينبغي النظر في مشكلات الترميز.
3. أنواع بدون حدود الطول ، مثل الأعداد الصحيحة الكبيرة: لتشفير إطار إطار ، التمييز بين كل إطار بواسطة محدد أو بتات الطول.
البث المتعدد والبث
يمكننا إحياء نسخة من البيانات لكل مستلم ، ولكن هذا يمكن أن يكون غير فعال للغاية.
فقط مآخذ UDP تسمح للبث والبث المتعدد. الفرق بين الاثنين هو أنه سيتم إرسال البث إلى جميع المضيفين القابل للوصول على الشبكة ، وقد لا تسمح بعض أنظمة التشغيل للمستخدمين العاديين بإجراء عمليات البث ؛ بينما سيتم إرسال البث المتعدد فقط إلى المضيفين المهتمين. على وجه التحديد ، يصف JoingRoup () من SecastSocket للانضمام إلى مضيف مجموعة البث المتعدد.
الطبقة العامة MulticastReceivertest {public static void main (string [] args) يلقي الاستثناء {Final inetaddress address = inetaddress.getByName ("224.1.1.1") ؛ منفذ int النهائي = 45599 ؛ لـ (int i = 0 ؛ i <5 ؛ i ++) {new thread ("thread #"+i) {Override public void run () {try {multicastsocket sock = new multicastsocket (port) ؛ Sock.joingroup (العنوان) ؛ Byte [] msg = new byte [256] ؛ حزمة DataGrampacket = datagrampacket جديد (msg ، msg.length) ؛ Sock.Receive (حزمة) ؛ system.out.println (thread.currentThRead (). getName () + "receed:" + new string (packet.getData ())) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } } } }.يبدأ()؛ } thread.sleep (2000) ؛ SockStoCket Sock = جديد multiCastSocket () ؛ Sock.Settimetolive (32) ؛ byte [] msg = "hellomulticast" .getBytes () ؛ حزمة DataGrampacket = datagrampacket جديد (msg ، msg.length ، العنوان ، المنفذ) ؛ Sock.send (حزمة) ؛ System.out.println ("Message SentR") ؛ }}