Komunikasi soket berdasarkan protokol UDP
Pengenalan kepada bahagian ini:
Bahagian ini membawakan anda bahagian terakhir Soket: Komunikasi soket berdasarkan protokol UDP Dalam bahagian pertama kami telah menerangkan secara terperinci Membandingkan perbezaan antara kedua-duanya, perbezaan terbesar antara TCP dan UDP ialah sama ada pelanggan perlu mewujudkan sambungan dengan pelayan sebelum meneruskan. Penghantaran data, jika anda telah mempelajari TCP dalam dua bahagian pertama, buka pelayan terlebih dahulu sebelum penghantaran, terima, tunggu klien mengakses, dan kemudian dapatkan Soket pelanggan kemudian melakukan operasi IO, tetapi UDP tidak menggunakan datagram sebagai pembawa penghantaran data Mula-mula, data yang dihantar mesti ditakrifkan sebagai datagram (Datagram), dan Soket (alamat hos) yang mana data harus sampai dinyatakan dalam datagram. dan nombor port), dan kemudian menghantar data dalam bentuk datagram, dan kemudian tidak ada lagi Jika pelayan tidak dapat menerimanya, saya akan Saya tidak tahu, melainkan pelayan menghantar saya datagram pengesahan selepas menerimanya~ Saya tidak akan menulis contoh Android lain kerana kekangan masa. Masukkan terus kod Java~
1 Langkah pelaksanaan bahagian pelayan:
Langkah 1: Buat DatagramSocket dan nyatakan port. nombor
Langkah 2: Cipta DatagramPacket
Langkah 3: Terima maklumat data yang dihantar oleh pelanggan
Langkah 4: Baca data
Kod contoh:
public class UPDServer { public static void main(String[] args) throws IOException { /* * 接收客户端发送的数据 */ // 1.创建服务器端DatagramSocket,指定端口 DatagramSocket socket = new DatagramSocket(12345); // 2.创建数据报,用于接收客户端发送的数据 byte[] data = new byte[1024];// 创建字节数组,指定接收的数据包的大小 DatagramPacket packet = new DatagramPacket(data, data.length); // 3.接收客户端发送的数据 System.out.println("****服务器端已经启动,等待客户端发送数据"); socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞 // 4.读取数据 String info = new String(data, 0, packet.getLength()); System.out.println("我是服务器,客户端说:" + info); /* * 向客户端响应数据 */ // 1.定义客户端的地址、端口号、数据 InetAddress address = packet.getAddress(); int port = packet.getPort(); byte[] data2 = "欢迎您!".getBytes(); // 2.创建数据报,包含响应的数据信息 DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port); // 3.响应客户端 socket.send(packet2); // 4.关闭资源 socket.close(); } }
2. Langkah pelaksanaan pelanggan:
Langkah 1: Definisi Hantar maklumat
Langkah 2: Cipta DatagramPacket, mengandungi maklumat yang akan dihantar
Langkah 3: Cipta DatagramSocket
Langkah 4: Hantar data
public class UDPClient { public static void main(String[] args) throws IOException { /* * 向服务器端发送数据 */ // 1.定义服务器的地址、端口号、数据 InetAddress address = InetAddress.getByName("localhost"); int port = 8800; byte[] data = "用户名:admin;密码:123".getBytes(); // 2.创建数据报,包含发送的数据信息 DatagramPacket packet = new DatagramPacket(data, data.length, address, port); // 3.创建DatagramSocket对象 DatagramSocket socket = new DatagramSocket(); // 4.向服务器端发送数据报 socket.send(packet); /* * 接收服务器端响应的数据 */ // 1.创建数据报,用于接收服务器端响应的数据 byte[] data2 = new byte[1024]; DatagramPacket packet2 = new DatagramPacket(data2, data2.length); // 2.接收服务器响应的数据 socket.receive(packet2); // 3.读取数据 String reply = new String(data2, 0, packet2.getLength()); System.out.println("我是客户端,服务器说:" + reply); // 4.关闭资源 socket.close(); } }
Ringkasan bahagian ini:
Kandungan bahagian ini agak mudah ia tidak lebih daripada menukar data kepada bait dan kemudian memasukkannya ke dalam DatagramPacket. (paket datagram ), dihantar Apabila menerima, bawa alamat IP dan nombor port penerima, dan apabila menerima, gunakan tatasusunan bait untuk cache! Apabila menghantar, anda perlu mencipta objek DatagramSocket (kelas komunikasi hujung ke hujung), dan kemudian panggil kaedah hantar untuk menghantar paket datagram kepada penerima~ Kod dalam bahagian ini datang daripada tutorial JavaSocket di Muke.com~ Jika anda berminat, anda boleh lihat: Aplikasi Java Socket---Beginilah cara komunikasi diamalkan