En Java, podemos tener muchas formas de enviar y recibir datos. Algunos métodos están más cerca de la capa inferior, y algunos problemas deben ser resueltos por los propios programadores, mientras que algunos métodos son relativamente altos en abstracción y pueden usarse muy convenientemente. Estos métodos de procesamiento de datos son de bajo a alto según el nivel de abstracción:
1. Codificación manual: use operaciones de bit para codificar y analizar una por una.
2. Use las secuencias para codificar automáticamente: Use OutputStream y ByteArRayOutputStream en combinación.
3. Serialización: coloque los datos en un objeto de datos, sea serializa el objeto directamente y envíelo.
Es muy conveniente de usar, pero debe prestar atención a la pérdida de eficiencia y el receptor también debe usar Java.
4.RMI: envíe todas las llamadas al método e implementa directamente la llamada remota del método.
En el método 1 de nivel más bajo, necesitamos resolver algunos problemas subyacentes nosotros mismos:
1. Envío de enteros: Considere si se trata de un extremo de cola grande o un pequeño extremo de cola, un entero sin firmar o un número entero firmado.
2. Enviar cadenas: se deben considerar los problemas de codificación.
3. Tipos sin límites de longitud, como enteros grandes: para codificar un marco de marco, distinga cada cuadro por delimitador o bits de longitud.
Multidifusión y transmisión
Podemos unidificar una copia de los datos a cada destinatario, pero esto puede ser muy ineficiente.
Solo los enchufes UDP permiten transmisión y multidifusión. La diferencia entre los dos es que la transmisión se enviará a todos los hosts accesibles en la red, y algunos sistemas operativos pueden no permitir que los usuarios comunes realicen operaciones de transmisión; mientras que la multidifusión solo se enviará a los anfitriones interesados. Específicamente, llama a JoingRoup () de MultiCastsocket para unirse al host del grupo de multidifusión.
public class MulticastreceiverTest {public static void main (string [] args) lanza la excepción {Final InetAddress Dirección = inetaddress.getByName ("224.1.1.1"); Port INT final = 45599; for (int i = 0; i <5; i ++) {new Thread ("Thread #"+i) {@Override public void run () {try {multicastSocket Sock = new MultiCastSocket (puerto); SOCK.JOINGROUP (dirección); byte [] msg = nuevo byte [256]; Paquete de dataGrampacket = nuevo DataGrampacket (msg, msg.length); Sock.Receive (paquete); System.out.println (thread.currentThread (). GetName () + "recibir:" + nueva cadena (paquete.getData ())); } catch (ioException e) {E.PrintStackTrace (); } } } }.comenzar(); } Thread.sleep (2000); MulticastSocket Sock = new MultiCastSocket (); Sock.Settimetolive (32); byte [] msg = "hellomulticast" .getBytes (); Paquete de dataGrampacket = nuevo DataGrampacket (msg, msg.length, dirección, puerto); Sock.send (paquete); System.out.println ("Mensaje enviado"); }}