UDP通訊知識介紹及簡易教程

2021-08-13 20:56:51 字數 2299 閱讀 8596

三、udp廣播與單播

使用udp協議進行資訊的傳輸之前不需要建議連線。換句話說就是客戶端向伺服器傳送資訊,客戶端只需要給出伺服器的ip位址和埠號,然後將資訊封裝到乙個待傳送的報文中並且傳送出去。至於伺服器端是否存在,或者能否收到該報文,客戶端根本不用管。     

單播用於兩個主機之間的端對端通訊,廣播用於乙個主機對整個區域網上所有主機上的資料通訊。單播和廣播是兩個極端,要麼對乙個主機進行通訊,要麼對整個區域網上的主機進行通訊。實際情況下,經常需要對一組特定的主機進行通訊,而不是整個區域網上的所有主機,這就是多播的用途。

通常我們討論的udp的程式都是一對一的單播程式。本章將討論一對多的服務:廣播(broadcast)、多播(multicast)。對於廣播,網路中的所有主機都會接收乙份資料副本。對於多播,訊息只是傳送到乙個多播位址,網路知識將資料分發給哪些表示想要接收傳送到該多播位址的資料的主機。總得來說,只有udp套接字允許廣播或多播。

回到頂部(go to top)

廣播udp與單播udp的區別就是ip位址不同,廣播使用廣播位址255.255.255.255,將訊息傳送到在同一廣播網路上的每個主機。值得強調的是:本地廣播資訊是不會被路由器**。當然這是十分容易理解的,因為如果路由器**了廣播資訊,那麼勢必會引起網路癱瘓。這也是為什麼ip協議的設計者故意沒有定義網際網路範圍的廣播機制。

廣播位址通常用於在網路遊戲中處於同一本地網路的玩家之間交流狀態資訊等。

其實廣播顧名思義,就是想區域網內所有的人說話,但是廣播還是要指明接收者的埠號的,因為不可能接受者的所有埠都來收聽廣播。

udp服務端**:

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 using namespace std;

11 int main()

12 這五個資料表示,該套接字在傳送資料報時,本地使用埠8888,本地可以使用任意乙個網路裝置介面,發往的目的位址不指定。在接收資料時,只接收發往ip位址224.0.0.88的埠為8888的資料。

我的疑問???

為什麼要廣播方和接受方的埠號相同才能收到廣播?我試了在一台linux機子上開兩個客戶端其中乙個和廣播方的埠號不同,這個客戶端結果收不到廣播,哪位網友知道懇請告之。

程式中,緊接著bind有乙個setsockopt操作,它的作用是將socket加入乙個組播組,因為socket要接收組播位址224.0.0.1的資料,它就必須加入該組播組。

回到頂部(go to top)

廣播和單播的處理過程是不同的,單播的資料只是收發資料的特定主機進行處理,而廣播的資料整個區域網都進行處理。

例如在乙個乙太網上有3個主機,主機的配置如表11.4所示。

表11.4 某區域網中主機的配置情況

主 機a

b

c

ip位址

192.168.1.150

192.168.1.151

192.168.1.158

mac位址

00:00:00:00:00:01

00:00:00:00:00:02

00:00:00:00:00:03

單播流程:主機a向主機b傳送udp資料報,傳送的目的ip為192.168.1.151,埠為 80,目的mac位址為00:00:00:00:00:02。此資料經過udp層、ip層,到達資料鏈路層,資料在整個乙太網上傳播,在此層中其他主機會 判斷目的mac位址。主機c的mac位址為00:00:00:00:00:03,與目的mac位址00:00:00:00:00:02不匹配,資料鏈路層 不會進行處理,直接丟棄此資料。

主機b的mac位址為00:00:00:00:00:02,與目的mac位址00:00:00:00:00:02一致,此資料會經過ip層、udp層,到達接收資料的應用程式。

廣播的流程:主機a向整個網路傳送廣播資料,傳送的目的ip為192.168.1.255,埠為 80,目的mac位址為ff:ff:ff:ff:ff:ff。此資料經過udp層、ip層,到達資料鏈路層,資料在整個乙太網上傳播,在此層中其他主機會 判斷目的mac位址。由於目的mac位址為ff:ff:ff:ff:ff:ff,主機c和主機b會忽略mac位址的比較(當然,如果協議棧不支援廣播,則 仍然比較mac位址),處理接收到的資料。

主機b和主機c的處理過程一致,此資料會經過ip層、udp層,到達接收資料的應用程式。

C 使用udp進行簡易通訊

二 c 專案建立 三 c udp通訊程式編寫 四 結果顯示 五 wireshark抓包 六 小結 七 資料引用 所謂套接字 socket 就是對網路中不同主機上的應用程序之間進行雙向通訊的端點的抽象。乙個套接字就是網路上程序通訊的一端,提供了應用層程序利用網路協議交換資料的機制。從所處的地位來講,套...

UDP網路程式設計通訊簡易案例

伺服器端 server 步驟 1 建立socket套接字 套接字型別為資料報套接字 2 填充位址資訊 3 繫結 4 收發訊息 5 關閉socket 客戶端 client 步驟 1 建立socket套接字 2 填充位址資訊 3 傳送 4 接收 5 關閉socket 例 伺服器程式設計 include ...

JAVA學習 新手簡易UDP實時通訊

需要使用的包 原理 通過位元組陣列進行資料的儲存,然後將陣列,陣列長度,接收處的ip位址,埠號包裝起來,傳送出去,然後對方開啟埠號,接收後進行拆包 datagrampacke相當於貨櫃 datagramsocket相當於碼頭 把資料裝到貨櫃裡,然後把貨櫃存放在碼頭,傳送出去,對方碼頭接住貨櫃,然後再...