Em Java, podemos ter muitas maneiras de enviar e receber dados. Alguns métodos estão mais próximos da camada inferior e alguns problemas precisam ser resolvidos pelos próprios programadores, enquanto alguns métodos são relativamente altos em abstração e podem ser usados de maneira muito conveniente. Esses métodos de processamento de dados são de baixa a alta de acordo com o nível de abstração:
1. Codificação manual: use operações de bit para codificar e analisar um por um.
2. Use fluxos para codificar automaticamente: use o outputStream e bytearrayoutputStream em combinação.
3. Serialização: Coloque os dados em um objeto de dados, serialize o objeto diretamente e envie -o.
É muito conveniente usar, mas você precisa prestar atenção à perda de eficiência e o receptor também deve usar o Java.
4.RMI: Envie todas as chamadas para o método e implemente diretamente a chamada remota do método.
No método de nível mais baixo 1, precisamos resolver alguns problemas subjacentes:
1. Inteiro Enviando: Considere se é uma extremidade traseira grande ou uma pequena extremidade traseira, um número inteiro não assinado ou assinado.
2. Enviar sequências: Os problemas de codificação devem ser considerados.
3. Tipos sem limites de comprimento, como números inteiros grandes: para codificar um quadro de quadro, distingue cada quadro por delimitador ou bits de comprimento.
Multicast e transmissão
Podemos desencadear uma cópia dos dados para cada destinatário, mas isso pode ser muito ineficiente.
Somente soquetes UDP permitem transmissão e multicasting. A diferença entre os dois é que a transmissão será enviada a todos os hosts acessíveis na rede, e alguns sistemas operacionais podem não permitir que usuários comuns executem operações de transmissão; Embora a multicasting seja enviada apenas para hosts interessados. Especificamente, ele chama JoingRoup () do MulticastSocket para participar do host do grupo multicast.
classe pública MULTICASTRECEIVERTEST {public static void main (string [] args) lança Exceção {Final Inetaddress Endereço = inetaddress.getByName ("224.1.1.1"); Final Int Port = 45599; para (int i = 0; i <5; i ++) {new Thread ("Thread #"+i) {@Override public void run () {Try Sock.JoingRoup (Endereço); byte [] msg = novo byte [256]; Pacote de datagropgacket = novo datagroffacket (msg, msg.length); Sock.receive (pacote); System.out.println (thread.currentThread (). GetName () + "Receba:" + new String (packet.getData ())); } catch (ioexception e) {e.printStackTrace (); } } } }.começar(); } Thread.sleep (2000); MulticastSocket Sock = new MulticastSocket (); SOCK.SETTIMETOLIVE (32); byte [] msg = "hellomulticast" .getBytes (); Pacote de datagropgacket = new DatagRampacket (msg, msg.length, endereço, porta); Sock.send (pacote); System.out.println ("mensagem enviada"); }}