1. 程式人生 > 其它 >JAVA------UDP接受資料傳送資料

JAVA------UDP接受資料傳送資料

技術標籤:網路javaUDP網路協議

網路程式設計三要素:

  1. IP地址
  2. 協議

一、IP地址

IP地址常用命令:

  • ipconfig:檢視本機ip地址
  • ping IP地址:檢查網路是否連通
  • 特殊IP地址:127.0.0.1,是回送地址,可以代表本機地址,一般用來測試使用

IP地址
IP地址:是網路中裝置的唯一標識

IP地址分為兩大類:

  1. IPv4: 是給每個連線在網路上的主機分配一個32bit地址。 按照TCP/IP規定, IP地址用二進位制來表示,每個IP地址長32bit,也就是4個位元組。例如一個採用二進位制形式的IP地址是“10100000 10101000 000000101000010* , 這麼長的地址,處理起來也太費勁了。為了方便使用。IP地址經常被寫成十進位制的形式,中間使用符號““分隔不同的位元組。於是,上面的IP地址可以表示為"192.168.1.66” . IP地址的這種表示法叫做"點分十進位制表示法”,這顯然比1和0容易記憶得多

  2. IPv6: 由於網際網路的蓬勃發展,IP地址的需求量愈來愈大,但是網路地址資源有限,使得IP的分配越發緊張。為了擴大地址空間,通過IPv6重新定義地址空間,採用128位地址長度,每16個位元組一組,分成8組十六進位制數,這樣就解決了網路地址資源數量不夠的問題


InetAddress的使用

為了方便我們對IP地址的獲取和操作, Java提供 了一個類InetAddress 供我們使用
InetAddress:此類表示Internet協議 (IP) 地址

  • static InetAddress getByName(String host):確定主機名稱的IP地址。
    主機名稱可以是機器名稱,也可以是IP地址

  • String getHostName():獲取此IP地址的主機名

  • String getHostAddress()返回文字顯示中的IP地址字串

看程式碼演示:

netAddress address=InetAddress.getByName("LAPTOP-A61GB327");

這個LAPTOP-A61GB327是我計算機名稱,換成本機ip也可以

package InteAddress;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InteAdressDemo
{ public static void main(String[] args) throws UnknownHostException{ InetAddress address=InetAddress.getByName("LAPTOP-A61GB327"); String name=address.getHostName(); String ip=address.getHostAddress(); System.out.println("主機名:"+name); System.out.println("ip地址:"+ip); } }

二、埠

埠是裝置上應用程式的唯一標識

埠號:用兩個位元組表示的整數,它的取值範圍是0~65535。 其中,0~ 1023之間的埠號用於-些知名的網路服務和應用,普通的應用程式需要使用1024以上的埠號。如果埠號被另外-個服務或應用所佔用,會導致當前程式啟動失敗


三、協議

協議:計算機網路中,連線和通訊的規則被稱為網路通訊協議

1. UDP協議

  • 使用者資料報協議(User Datagram Protocol)
    UDP是無連線通訊協議,即在資料傳輸時,資料的傳送端和接收端不建立邏輯連線。簡單來說,當一臺計算機向另外一臺計算機發送資料時, 傳送端不會確認接收端是否存在,就會發出資料,同樣接收端在收到資料時,也不會向傳送端反饋是否收到資料。
    由於使用UDP協議消耗資源小,通訊效率高,所以通常都會用於音訊視訊和普通資料的傳輸

  • 例如視訊會議通 常採用UDP協議,因為這種情況即使偶爾丟失-兩個資料包,也不會對接收結果產生太大影響。但是在使用UDP協議傳送資料時,由於UDP的面向無連線性,不能保證資料的完整性,因此在傳輸重要資料時不建議使用UDP協議

2. TCP協議

  • 傳輸控制協議 (Transmission Control Protocol)
    TCP協議是面向連線的通訊協議,即傳輸資料之前,在傳送端和接收端建立邏輯連線,然後再傳輸資料,它提供了兩臺計算機之間可靠無差錯的資料傳輸。在TCP連線中必須要明確客戶端與伺服器端,由客戶端向服務端發出連線請求,每次連線的建立都需要經過“三次握手"

  • 三次握手: TCP協議中,在傳送資料的準備階段,客戶端與伺服器之間的三次互動,以保證連線的可靠
    第1次握手,客戶端向伺服器端發出連線請求,等待伺服器確認
    第2次握手,伺服器端向客戶端回送一個響應, 通知客戶端收到了連線請求
    第3次握手,客戶端再次向伺服器端傳送確認資訊,確認連線。

  • 完成三次握手,連線建立後,客戶端和伺服器就可以開始進行資料傳輸了。由於這種面向連線的特性,TCP協議可以保證傳輸資料的安全,所以應用十分廣泛。例如上傳檔案、下載檔案、 瀏覽網頁等


四、UDP接受資料傳送資料

UDP傳送資料的步驟:

  1. 建立傳送端的Socket物件(DatagramSocket)
  2. 建立資料,並將資料打包
  3. 呼叫DatagramSocket物件的方法傳送資料
  4. 關閉傳送端

看程式碼演示:

package UDP;

import java.io.IOException;
import java.net.*;

public class SendDemo {
	public static void main(String[] args) throws IOException{
		//建立傳送端的Socket物件(DatagramSocket)
		DatagramSocket ds=new DatagramSocket();
		
		//建立資料,並將資料打包
		//DatagramPacket(byte[] buf,int length,InetAddress address,int port)
		//構造一個數據包,傳送長度為length的資料包到指定主機上的指定埠號
		byte[] bys="hello,udp".getBytes();
		int len=bys.length;
		InetAddress address=InetAddress.getByName("192.168.223.1");
		int port=10086;//埠號
		DatagramPacket dp=new DatagramPacket(bys,len,address,port);
		 
		
		//呼叫DatagramSocket物件的方法傳送資料
		//void send(DatagramSocket p) 從此套接字傳送資料包
		ds.send(dp);
		
		//關閉傳送端
		ds.close();
	}
}

UDP接收資料的步驟:

  1. 建立接受端的Socket物件(DatagramSocket)
  2. 建立資料包,用於接受資料
  3. 呼叫DatagramSocket物件的方法接收資料
  4. 關閉傳送端

直接看程式碼:

package UDP;

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

public class RecriveDemo {
	public static void main(String[] args) throws IOException{
		//建立接受端的Socket物件(DatagramSocket)
		//DatagramSocket(int port)構造資料報套接字並將其繫結到本地主機的指定埠
		DatagramSocket ds=new DatagramSocket(10086);
		
		//建立資料包,用於接受資料
		//DatagramPacket(byte[] buf,int length)構造一個DatagramPacket用於接受長度為lenth資料包
		byte[] bys=new byte[1024];
		DatagramPacket dp=new DatagramPacket(bys, bys.length);
		
		//呼叫DatagramSocket物件的方法接收資料
		ds.receive(dp);
		 
		//解析資料包,並把資料在控制檯顯示
		//byte[] getData()返回資料緩衝區
		byte datas[]=dp.getData();
		//int getlength()返回要傳送的資料的長度或接收到的資料長度
		int len=dp.getLength();
		String dataString=new String(datas,0,len);
		System.out.println("資料是:"+dataString);
		
		//關閉傳送端
		ds.close();
	}

}

這裡IP地址是我本機IP,也就是傳送給自己資料,然後接收端來接受,就可以接收到傳送的資料"hello,udp"