Java網絡編程之UDP

 UDP User Datagram Protocol的簡稱, 中文名是用戶數據報協議,是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無鏈接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,IETF RFC 768UDP的正式規範。 java

UDP的特徵: 數組

  • 不須要創建鏈接,將數據及相關的地址都封裝到數據包中
  • 每一個數據包的大小限制在64k
  • 不須要創建鏈接,因此效率比較高,正由於不須要鏈接因此是不可靠協議

Socket 網絡

  • Socket就是爲網絡服務提供的一種機制
  • 通訊的兩端都有Socket
  • 網絡通信其實就是Socket通訊
  • 數據在兩個Socket間進行傳輸

Java中使用UDP的步驟 socket

發送端 spa

  1. 創建UDP的socket服務
  2. 封裝數據包(指明接收端的IP地址,和接收端的端口號)
  3. 經過socket的Send()發送數據
  4. 關閉服務

接收端 .net

  1. 建立socket服務(須要指明監視的端口號,而且要和發送端指定的接受端口的端口號一致)
  2. 定義數據包用於接收數據(構建DatagramPacket packet用於接收數據)
  3. 經過socket的Receiver()接受數據
  4. 經過packet提供的相應方法獲取發送端發送的信息
  5. 關閉服務

代碼案例以下 code

發送端 事務

package cc.enfp.socket.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

/*
 * UDP 發送端程序
 */
public class SendTest
{
    public static void main(String[] args) throws IOException
    {
	/*
	 * 一、建立socket服務
	 */
	DatagramSocket socket = new DatagramSocket();
	/*
	 * 二、提供相應的發送=信息
	 */
	byte[] data = "開啓udp之旅".getBytes();
	//指明接收端的IP地址,和接收端的端口號
	DatagramPacket packet = new DatagramPacket(data, data.length, 
		InetAddress.getLocalHost(), 10000);
	/*
	 * 三、使用socket的發送方法,進行數據的發送
	 */
	socket.send(packet);
	/*
	 * 四、關閉鏈接,釋放資源
	 */
	socket.close();
    }
}

接收端 ip

package cc.enfp.socket.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/*
 * UDP 接收端
 */
public class ReceiveTest
{
    public static void main(String[] args) throws Exception
    {
	/*
	 * 一、建立socket服務
	 * 	須要指明監視的端口號,而且要和發送端指定的接受端口的端口號一致
	 */
	DatagramSocket socket = new DatagramSocket(10000);
	/*
	 * 二、構建DatagramPacket packet用於接收數據
	 * 	packet只是爲了接受數據,因此只須要指明字節數組和長度就能夠
	 */
	byte[] data = new byte[1024];
	DatagramPacket packet = new DatagramPacket(data, data.length);
	/*
	 * 三、經過socket的receive方法將數據封裝到packet中
	 */
	socket.receive(packet);//該方法是阻塞
	/*
	 * 四、經過packet提供的相應方法獲取發送端發送的信息
	 */
	InetAddress ip = packet.getAddress();
	System.out.println("發送端的IP: "+ip.getHostAddress());
	
	//使用String的重載將返回的byte[]類型的內容轉換成字符串
	String content = new String(packet.getData(), 0, packet.getLength());
	System.out.println("發送端發送的內容爲: "+content);
	/*
	 * 5.關閉鏈接,釋放資源
	 */
	socket.close();
    }
}
相關文章
相關標籤/搜索