Di Java, kami dapat memiliki banyak cara untuk mengirim dan menerima data. Beberapa metode lebih dekat ke lapisan bawah, dan beberapa masalah perlu diselesaikan oleh programmer sendiri, sementara beberapa metode relatif tinggi abstraksi dan dapat digunakan dengan sangat mudah. Metode pemrosesan data ini dari rendah ke tinggi sesuai dengan tingkat abstraksi:
1. Pengkodean manual: Gunakan operasi bit untuk mengkode dan menguraikan satu per satu.
2. Gunakan stream untuk mengkode secara otomatis: Gunakan outputStream dan bytearrayoutputStream dalam kombinasi.
3. Serialisasi: Masukkan data ke dalam objek data, serialisasi objek secara langsung dan kirimkan.
Sangat nyaman untuk digunakan, tetapi Anda perlu memperhatikan hilangnya efisiensi dan penerima juga harus menggunakan Java.
4.RMI: Kirim semua panggilan ke metode dan secara langsung mengimplementasikan panggilan jarak jauh dari metode ini.
Dalam metode level terendah 1, kita perlu memecahkan beberapa masalah mendasar sendiri:
1. Pengiriman Integer: Pertimbangkan apakah itu ujung ekor yang besar atau ujung ekor kecil, bilangan bulat yang tidak ditandatangani atau ditandatangani.
2. Kirim string: Masalah pengkodean harus dipertimbangkan.
3. Jenis tanpa batas panjang, seperti bilangan bulat besar: untuk menyandikan bingkai bingkai, membedakan setiap bingkai dengan pembatas atau bit panjang.
Multicast dan siaran
Kita dapat unicast salinan data untuk setiap penerima, tetapi ini bisa sangat tidak efisien.
Hanya soket UDP yang memungkinkan penyiaran dan multicasting. Perbedaan antara keduanya adalah bahwa penyiaran akan dikirim ke semua host yang dapat dijangkau di jaringan, dan beberapa sistem operasi mungkin tidak mengizinkan pengguna biasa untuk melakukan operasi penyiaran; sementara multicasting hanya akan dikirim ke host yang tertarik. Secara khusus, ia memanggil Joingroup () dari multicastsocket untuk bergabung dengan host grup multicast.
kelas publik multicastreceiverTest {public static void main (string [] args) melempar pengecualian {final inetaddress address = inetaddress.getByName ("224.1.1.1"); port int akhir = 45599; untuk (int i = 0; i <5; i ++) {utas baru ("Thread #"+i) {@Override public void run () {coba {multicastsocket sock = new MulticastSocket (port); sock.joingroup (alamat); byte [] msg = byte baru [256]; Packet datagrampacket = datagrampacket baru (msg, msg.length); sock.receive (paket); System.out.println (thread.currentThread (). GetName () + "terima:" + string baru (packet.getData ())); } catch (ioException e) {e.printstacktrace (); } } } }.awal(); } Thread.sleep (2000); Multicastsocket Sock = multicastsocket baru (); sock.settimetolive (32); byte [] msg = "hellomulticast" .getbytes (); Packet datagrampacket = datagrampacket baru (msg, msg.length, alamat, port); sock.send (paket); System.out.println ("pesan terkirim"); }}