標籤:
1.UDP簡介
使用UDP發送訊息,對方不一定收到,因為所有的資訊使用資料報的形式發送出去,這就要求用戶端要始終等待接收伺服器發送過來的資訊,在Java中使用DatagramSocket類和DatagramPacket類完成UDP程式的開發。
2.程式實現
使用DatagramPacket類封裝一條要發送的資訊,之後使用DatagramSocket類用於完成資訊的發送操作。DatagramPacket類的常用方法:
類型 |
方法 |
描述
|
| 構造 |
DatagramPacket(byte[] buf, int length)
|
構造 DatagramPacket,用來接收長度為 length 的資料包。 |
| 構造 |
DatagramPacket(byte[] buf, int length, InetAddress address, int port) |
構造資料報包,用來將長度為 length 的包發送到指定主機上的指定連接埠號碼。 |
| byte[] |
getData() |
返回資料緩衝區。 |
int |
getLength()
|
返回將要發送或接收到的資料的長度。 |
DatagramSocket類常用方法:
類型 |
方法 |
描述 |
| 構造 |
DatagramSocket(int port) |
建立資料通訊端並將其綁定到本地主機上的指定連接埠。 |
void |
send(DatagramPacket p)
|
從此通訊端發送資料報包。 |
void |
receive(DatagramPacket p)
|
從此通訊端接收資料報包。 |
伺服器端:
package org.demo.net;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class UDPServer { public static void main(String[] args) throws Exception{ DatagramSocket ds = null; DatagramPacket dp = null; ds = new DatagramSocket(3000); String str = "hello"; dp = new DatagramPacket(str.getBytes(),str.length(), InetAddress.getByName("localhost"),9000); System.out.println("發送資訊。"); ds.send(dp); ds.close(); }}
運行結果:
用戶端:
package org.demo.net;import java.net.DatagramPacket;import java.net.DatagramSocket;public class UDPClient { public static void main(String[] args) throws Exception{ DatagramSocket ds = null; byte[] buf = new byte[1024];//定義接收資料的位元組數組 DatagramPacket dp = null; ds = new DatagramSocket(9000); dp = new DatagramPacket(buf,1024); System.out.println("等待資料接收。"); ds.receive(dp); String str = new String(dp.getData(),0,dp.getLength())+"from" +dp.getAddress().getHostAddress()+":"+dp.getPort(); System.out.println(str); ds.close(); }}
運行結果:
Java網路編程之UDP程式設計