類別DatagramSocket和DatagramPacket【資料包/資料封包】實作了基於UDP協定網路程式。
UDP資料封包透過資料報套接字DatagramSocket發送和接收,系統不保證UDP資料封包一定能安全送到目的地,也不確信何時可以抵達。
DatagramPacket物件封裝了UDP資料報,在資料封包中包含了發送端的IP位址和連接埠號碼以及接收端的IP位址和連接埠號碼。
UDP協定中每個資料封包都給出了完整的位址訊息,因此無須建立傳送者和接收者的連線。
核心的兩個類別/物件DatagramSocket域DatagramPacket
package com.study.srv.demo18; import java.io.IOException; import java.net.*; /** * @version 1.0 * UDP发送端 */ public class Demo11 { public static void main(String[] args) throws IOException { //1.创建DatagramSocket对象,准备发送和接收数据,在9998端口接收 DatagramSocket datagramSocket = new DatagramSocket(9998); //2.将需要发送的数据,封装到DatagramPacket对象 String s="发送的数据"; byte[] buf=s.getBytes(); InetAddress ip = InetAddress.getByName("192.168.0.18"); //说明:封装的DatagramPacket对象 //buf 内容字节数组 //buf.length 数据长度 //ip 主机(ip) //9999 端口 DatagramPacket packet = new DatagramPacket(buf, buf.length, ip, 9999); //发送数据 datagramSocket.send(packet); //关闭资源 // datagramSocket.close(); System.out.println("发送完毕"); //发送端变为接收端接收数据 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length); datagramSocket.receive(datagramPacket); int length = datagramPacket.getLength(); byte[] data = datagramPacket.getData(); String string = new String(data, 0, length); System.out.println(string); datagramSocket.close(); System.out.println("接受结束"); } }
package com.study.srv.demo18; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; /** * @version 1.0 *UDP接收端 */ public class Demo10 { public static void main(String[] args) throws IOException { //1.创建一个 DatagramSocket对象,准备在9999接收数据 DatagramSocket datagramSocket = new DatagramSocket(9999); //2.构建一个DatagramPacket 对象,准备接收数据 //在UDP协议,一个数据包最大64k byte[] buf=new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); //3.接收方法 将通过网络传输的DatagramPacket对象填充到packet里去。 System.out.println("接收端等待接收"); datagramSocket.receive(packet); //4.可以对packet进行拆包,取出数据,并显示 //实际接收到的数据字节长度 int length = packet.getLength(); //实际接收到的数据 byte[] data = packet.getData(); String string = new String(data, 0, length); System.out.println(string); //5.关闭资源 // datagramSocket.close(); System.out.println("接收结束"); //接收端变为发送端,发送数据 String s="接收端变为发送端,发送数据"; byte[] bytes=s.getBytes(); DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.0.18"), 9998); datagramSocket.send(datagramPacket); datagramSocket.close(); System.out.println("发送完毕"); } }
以上是Java怎麼實作基於UDP協定的網路通訊UDP編程的詳細內容。更多資訊請關注PHP中文網其他相關文章!