Java通過兩個類DatagramSocket和DatagramPacket來支持Datagram socket。DatagramSocket實現了Datagram socket的基本功能,而DatagramPacket則提供了對包的一些支持。DatagramPacket表示存放數據的數據報,DatagramSocket表示接受或發送數據報的套接字
DatagramSocket的幾個重要方法:
(1) DatagramSocket():隨機綁定一個有效的端口;
(2) DatagramSocket(int port):綁定指定的端口;
(3)DatagramSocket(int aPort, InetAddress addr):綁定指定的端口和地址
(4) Void send(DatagramPacket p):發送數據報,由於目的地的地址信息已包含在數據報中,所以不需要在本函數中提供地址信息;
(5) synchronized void receive(DatagramPacket p):接收數據包,線程安全;
(6) synchronized void close():關閉socket;
DatagramPacket有以幾個重要的方法:
(1) DatagramPacket(byte ibuf[], int ilength):用於接收數據報;
(2) DatagramPacket(byte ibuf[], int ilength, InetAddress iaddr, int iport):用於發送的數據報;
(3) byte[] getData();
(4) int getLength()
客戶端發送數據代碼:
InetAddress ia = InetAddress.getByName("127.0.0.1");
byte[] bs = "請叫我將軍".getBytes("UTF-8");
DatagramPacket request = new DatagramPacket(bs, bs.length, ia, 8888);
DatagramSocket socket = new DatagramSocket();
socket.send(request);
服務器接收代碼:
byte[] inbuf = new byte[256]; // 默認的數據緩衝大小
DatagramSocket socket = new DatagramSocket(8888);
// 等待數據
DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length);
socket.receive(packet);
int numBytesReceived = packet.getLength();
System.out.println(new String(inbuf, 0, numBytesReceived, "UTF-8"));