En Java, nous pouvons avoir de nombreuses façons d'envoyer et de recevoir des données. Certaines méthodes sont plus proches de la couche inférieure, et certains problèmes doivent être résolus par les programmeurs eux-mêmes, tandis que certaines méthodes sont relativement élevées en abstraction et peuvent être utilisées très facilement. Ces méthodes de traitement des données sont de faibles à élevées selon le niveau d'abstraction:
1. Encodage manuel: utilisez des opérations de bits pour encoder et analyser une par une.
2. Utilisez des flux pour encoder automatiquement: Utilisez OutputStream et ByteArrayOutputStream en combinaison.
3. Sérialisation: Mettez les données dans un objet de données, sérialisez directement l'objet et envoyez-le.
Il est très pratique à utiliser, mais vous devez faire attention à la perte d'efficacité et le récepteur doit également utiliser Java.
4.RMI: Envoyez tous les appels à la méthode et implémentez directement l'appel distant de la méthode.
Dans la méthode le plus bas 1, nous devons résoudre nous-mêmes certains problèmes sous-jacents:
1. Envoi entier: Déamiez s'il s'agit d'une grande extrémité ou d'une petite queue, d'un entier non signé ou signé.
2. Envoi des chaînes: les problèmes d'encodage doivent être pris en compte.
3. Types sans limites de longueur, tels que les grands entiers: pour coder un cadre de cadre, distinguez chaque trame par des bits de délimiteur ou de longueur.
Multidiffusion et diffusion
Nous pouvons unicast une copie des données à chaque destinataire, mais cela peut être très inefficace.
Seules les prises UDP permettent la diffusion et la multidiffusion. La différence entre les deux est que la diffusion sera envoyée à tous les hôtes accessibles sur le réseau, et certains systèmes d'exploitation peuvent ne pas permettre aux utilisateurs ordinaires d'effectuer des opérations de diffusion; Alors que la multidiffusion ne sera envoyée qu'aux hôtes intéressés. Plus précisément, il appelle joINingRoup () de MulticastSocket pour se joindre à l'hôte du groupe de multidiffusion.
classe publique MultiCastReceIverTest {public static void main (String [] args) lève une exception {final InetAddress adresse = InetAddress.getByName ("224.1.1.1"); Port int final = 45599; pour (int i = 0; i <5; i ++) {new Thread ("Thread #" + i) {@Override public void run () {try {MultiCastSocket sock = new MultiStSectSocket (port); sock.Joingroup (adresse); octet [] msg = nouveau octet [256]; Datagrampacket Packet = new Datagrampacket (msg, msg.length); sock.receive (paquet); System.out.println (thread.currentThread (). GetName () + "Recevoir:" + new String (packet.getData ())); } catch (ioException e) {e.printStackTrace (); } } } }.commencer(); } 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 (paquet); System.out.println ("Message envoyé"); }}