In Java können wir viele Möglichkeiten haben, Daten zu senden und zu empfangen. Einige Methoden sind näher an der unteren Schicht, und einige Probleme müssen selbst von den Programmierern selbst gelöst werden, während einige Methoden relativ hoch in der Abstraktion sind und sehr bequem verwendet werden können. Diese Methoden zur Verarbeitungsdaten sind je nach Abstraktionsebene von niedrig bis hoch:
1. Handbuchcodierung: Verwenden Sie Bit -Operationen, um nacheinander zu codieren und zu analysieren.
2. Verwenden Sie Streams, um automatisch zu codieren: Verwenden Sie OutputStream und BytearrayoutputStream in Kombination.
3. Serialisierung: Legen Sie die Daten in ein Datenobjekt, serialisieren Sie das Objekt direkt und senden Sie es.
Es ist sehr bequem zu verwenden, aber Sie müssen auf den Effizienzverlust achten, und der Empfänger sollte auch Java verwenden.
4.RMI: Senden Sie alle Anrufe an die Methode und implementieren Sie den Remote -Anruf der Methode direkt.
In der Methode der niedrigsten Ebene 1 müssen wir selbst einige zugrunde liegende Probleme lösen:
1. Integer Senden: Überlegen Sie, ob es sich um ein großes Ende oder ein kleines Ende, ein nicht signiertes oder eine signierte Ganzzahl handelt.
2. Senden Saiten: Codierungsprobleme sollten berücksichtigt werden.
3. Typen ohne Längengrenzen, wie z. B. große Ganzzahlen: Um einen Rahmen zu codieren, unterscheiden Sie jeden Frame durch Trennzeichen oder Längenbits.
Multicast und Sendung
Wir können eine Kopie der Daten an jeden Empfänger entzünden, dies kann jedoch sehr ineffizient sein.
Nur UDP -Sockets ermöglichen Rundfunk und Multicasting. Der Unterschied zwischen den beiden besteht darin, dass das Rundfunk an alle erreichbaren Hosts im Netzwerk gesendet wird, und einige Betriebssysteme ermöglichen es den normalen Benutzern möglicherweise nicht, Rundfunkvorgänge auszuführen. Während Multicasting nur an interessierte Gastgeber gesendet wird. Insbesondere ruft es Joingroup () von Multicastocket auf, um sich dem Host der Multicast -Gruppe anzuschließen.
öffentliche Klasse MulticastreceiferTest {public static void main (String [] args) löst die Ausnahme aus {endgültig inetaddress address = inetaddress.getByName ("224.1.1.1"); Final INT Port = 45599; für (int i = 0; i <5; i ++) {neuer Thread ("Thread #"+i) {@Override public void run () {try {multicastSocket socK = new MulticastSocket (Port); Sock.Joingroup (Adresse); Byte [] msg = neues Byte [256]; DataGrampacket packet = new DataGrampacket (msg, msg.length); Sock.Receive (Paket); System.out.println (Thread.currentThread (). GetName () + "Empfangen:" + neue String (packet.getData ())); } catch (ioException e) {e.printstacktrace (); } } } }.Start(); } Thread.sleep (2000); MulticastSocket Sock = new MulticastSocket (); Sock.Settimetolive (32); byte [] msg = "Hellomulticast" .GetBytes (); DataGrampacket Packet = new Datagrampacket (MSG, MSG.Length, Adresse, Port); Sock.Send (Paket); System.out.println ("Nachricht gesendet"); }}