java網路程式設計:13、基於UDP的socket程式設計(三)實現相互發送接收訊息
宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!!
文章目錄
通過上兩篇文章:1、瞭解了基於UDP通訊的理論、基本步驟以及它跟TCP的區別,2、寫一個簡單的例項演示了一下。大家如需瞭解可參考我的系列文章,這篇將演示UDP實現相互發送接收訊息。
一、前言
上篇文章我們實現了傳送端向接收端傳送訊息的程式碼。那麼對於這個recv接收端來說,它能不能夠給我們send傳送端,回一個資訊呢?也就是說由這個接收端給我們傳送端傳送一個資訊。它首先得知道傳送端的ip地址、和傳送端程序所繫結的埠號,那麼當傳送端它傳送一個數據包的時候,那麼這個資料包當中,就有傳送端程序所在機器的ip地址和我們這個傳送端程序所繫結的埠號,那麼這個埠號是作業系統給它分配的任意一個可以利用的埠號。
那麼接收端它收到這個資料包之後,這個時候相當於是建立起來了傳送端和接收端之間的一個虛連線,那麼接收端可以通過它所收到的這個資料包,從這個資料包當中提取出來傳送端的ip地址和埠號,然後給我們傳送端傳送資料。
二、基於UDP伺服器端程式的編寫
/** * 基於UDP伺服器端程式的編寫 */ public static void recv() { try { //建立資料報套接字物件,繫結埠號為6000 DatagramSocket ds = new DatagramSocket(6000); //構建資料包接收資料: //建立位元組陣列 byte[] buf = new byte[100]; //建立資料包物件,它的長度不能超過陣列的長度,我們把它設為100 DatagramPacket dp = new DatagramPacket(buf, 100); //接收資料 ds.receive(dp); //列印資料 //getLength方法返回實際接收數;getData方法返回資料,返回格式為位元組陣列 System.out.println(new String(buf, 0, dp.getLength())); //給客戶端答覆 String str = "Welcome you!"; //getAddress()、getPort()方法,可獲得傳送資料時的ip地址、埠號 DatagramPacket dpSend = new DatagramPacket( str.getBytes(), str.length(), dp.getAddress(), dp.getPort()); ds.send(dpSend); ds.close(); } catch (Exception ex) { ex.printStackTrace(); } }
三、基於UDP客戶端程式的編寫
/** * 基於UDP客戶端程式的編寫 */ public static void send() { try { //建立一個數據報物件。 DatagramSocket ds = new DatagramSocket(); //要傳送的資料 String str = "Hello,this is zhangsan"; //構造一個傳送資料包: //InetAddress.getByName("localhost"):獲得本地ip地址 //埠號指定為6000 DatagramPacket dp = new DatagramPacket( str.getBytes(), str.length(), InetAddress.getByName("localhost"), 6000); //傳送資料包 ds.send(dp); //建立位元組陣列 byte[] buf = new byte[100]; //構建接收資料的資料包 DatagramPacket dpRecv = new DatagramPacket(buf, 100); //接收資料 ds.receive(dpRecv); //列印資料 System.out.println(new String(buf, 0, dpRecv.getLength())); //關閉資料報套接字 ds.close(); } catch (Exception ex) { ex.printStackTrace(); } }
四、測試列印
我們首先啟動接收端的recv方法,然後啟動傳送端的send方法,我們可以看到對於傳送端來說,它收到了接收端給它回覆的資訊,如下圖:
注意:
資料報套接字雖然不像我們TCP通訊時要建立連線。但是當第一次資料傳送成功之後,那麼它也是相當於建立了一個虛連線,
那麼雙方之間都可以傳送資料和讀取資料。
五、系列文章(java網路程式設計)
java網路程式設計:1、計算機網路?網路通訊的組成?什麼是ip、協議、埠號?
java網路程式設計:2、IP地址、協議、網路狀況、網路異質性問題的解決
java網路程式設計:6、TCP/IP模型、TCP/IP模型與OSI參考模型的對應關係
java網路程式設計:8、基於TCP的socket程式設計(一)簡單的socket通訊_一個客戶端
java網路程式設計:9、基於TCP的socket程式設計(二)伺服器端迴圈監聽接收多個客戶端_多執行緒伺服器程式
java網路程式設計:10、基於TCP的socket程式設計(三)緩衝流、flush方法、關閉流
java網路程式設計:11、基於UDP的socket程式設計(一)理論、基本步驟
java網路程式設計:12、基於UDP的socket程式設計(二)程式碼通訊-簡單例項
java網路程式設計:13、基於UDP的socket程式設計(三)實現相互發送接收訊息