組播 多播 的C程式實戰

2021-07-11 10:21:41 字數 1762 閱讀 1955

每個人都有不同的認知規律和習慣, 有的人喜歡搞一套嚴密的大理論, 論述起來滔滔不絕, 不管自己懂不懂, 反正讀者/聽者是沒搞懂。 有的人喜歡從實踐出發, 沒看到**, 不執行一下, 不看到結果, 就不太舒服。 我感覺, 我偏向後者, 必須有乙個結果作用於我, 我才有感觸。

比如初學c語言, 我也很不喜歡老師總在講什麼原碼, 反碼和補碼, 講什麼 32767 + 1 為什麼等於-32768, 講什麼m.nf%控制輸出的具體含義.  我更喜歡搞個階乘執行一下來玩玩, 搞個簡單的介面問答系統感知一下, 搞個排序或者漢諾塔什麼的玩玩。 等玩到一定程度, 再回去學那些略顯枯燥的無聊知識。

好吧, 不扯了, 畢竟每個人的學習習慣不一樣。 

在本文中, 我就不大講特講組播了,  至於組播概念和原理, 度娘谷哥會告訴你, 請自學去,其實也很簡單。當然, 如果後續有必要涉及, 我也會介紹一下。 現在僅僅來實戰一下組播。

(有必要說明一下, 下面兩個程式必須執行在相同的機器上才有效)

傳送程式為:

[cpp]view plain

copy

#include 

#include 

#include 

#pragma comment(lib, "ws2_32.lib")

intmain()  

;  sprintf(buf, "blablablabla:%d"

, i++);  

sendto(sock, buf, strlen(buf) + 1, 0, (sockaddr*)&addr, sizeof

(sockaddr));  

sleep(500);   

}  closesocket(sock);  

wsacleanup();  

return

0;  

}  

執行它。

加入組播的接收程式為:

[cpp]view plain

copy

#include 

#include 

#include 

#pragma comment(lib, "ws2_32.lib")

intmain()  

;  recvfrom(sock, buf, sizeof

(buf) - 1, 0, (sockaddr*)&addr, &len);  

printf("%s\n"

,buf);  

}  closesocket(sock);  

wsacleanup();  

return

0;  

}  

執行它。

結果如下(兩個程序通訊了):

上面我們說過, 如上兩個程式必須執行在同一電腦上才有效, 那要執行在不同的電腦上, 該怎麼辦呢? 我們注意到, 在傳送程式中有int n = 0; 這個n為零表示傳送端和接收端必須位於同一機器上, 如果n為1, 那麼傳送端和接收端就可以位於不同機器上了, 只需要他們位於同乙個子網內即可。 實戰過程如下: 假設pc0, pc1, pc2, pc3...在同乙個子網內,將傳送端的n改為 1且, 執行在pc0上, 然後在pc1, pc2, pc3...上執行接收端, 可以發現, pc1, pc2, pc3都接收到了組播訊息, 與我們預期的結果吻合。

好吧, 先這樣。

多播和組播

1.多播 多播 也可以稱為 組播 這樣的多播應用tcp 2.廣播 廣播 在網路中的應用較多,如客戶機通過dhcp自動獲得ip位址的過程就是通過廣播來實現的。但是同單播和多播相比,廣播幾乎占用了子網內網路的所有頻寬。拿開會打乙個比方吧,在會場上只能有乙個人發言,想象一下如果所有的人同時都用麥克風發言,...

winsock 多播(組播)

組播,就是有一組主機,乙個主機傳送資料,組內其他的主機都會收到。首先,根據上圖講述組播的原理 我們把路由器192.168.0.1埠也看做一台主機,這樣就有四台主機連線到交換機上。根據乙太網的原理,交換機不知道ip位址的存在,只知道mac位址。交換機會根據資料中的目的mac位址把資料報 到某個埠上,保...

多播 組播 原理分析

為什麼要使用多播 網絡卡從網路上接收到目標實體地址對應的所有bit位都為1的資料報時,會收到這條訊息並將其上傳給驅動程式,網絡卡的這種工作模式稱為廣播模式,網絡卡的預設工作模式包含直接模式和廣播模式。利用這一特性,udp 使用者資料報協議 還提供了向多個目標位址傳送廣播資料報的能力。廣播資料即資料從...