FCL應用技巧之 實現UDP組播

2021-06-16 20:45:56 字數 934 閱讀 9760

整個d類位址是不能配置到主機網絡卡上的,它們專門供組播使用。

fcl為使用udp提供了兩個類,乙個是基礎的socket,乙個是封裝了socket的udpclient。需要說明的是,組播的特殊性只是在接收方才存在,對於傳送方,直接向組播ip位址傳送即可,與單播無異。

傳送程式如下:

class program}}

由於udpclient對socket進行了很好的封裝,所以使用起來比較方便,本身就提供了加入組播組的方法。**如下:

public class udpmulticastlistener}}

socket提供了最基礎和靈活的控制,需要通過setsocketoption()方法來加入組播組。**如下:

public class udpmulticastlistener}}

需要注意的是,指定multicastoption的時候,必須為其指定要使用網絡卡源ip位址,否則組播不能成功。

通過上面例項可以看出,在c#中使用組播非常簡單。組播在乙太網中是如何實現的呢?

首先,與ip位址一樣,乙太網中的mac位址也有一部分專門供組播使用,他們的特徵是最高位元組的最低位是1,這些mac位址不能作為網絡卡的mac,只能是組播mac。對這些mac的處理是這樣的:交換機會把目的mac是組播mac的包**到同一vlan的所有埠,主機上的網絡卡不僅接收目的mac是自己mac的,也接收目的mac是組播mac的包,然後把收到的包剝去以太層交給ip層、udp層繼續處理。在ip層,如果發現目的ip是組播ip,並且本機已加入了這個組播組,則交由對應的應用程式處理,否則丟棄。

關於組播ip於組播mac的對應規則有專門的規定。關於組播有一篇英文妙文,

C 黔驢技巧之實現統計結果排名

我們知道在sql server中可以利用row number rank等函式進行排名,在mysql中可以利用變數方式來實現排名,對於計算操作我傾向於放在記憶體中來操作,而資料庫只是做簡單的操作,儘管各個資料庫可能提供了對應函式來進行處理,但是一旦資料量大時,可能擱置到記憶體中計算不失為一種好的方式。...

udp組播通訊實現 c

前幾天需要做乙個和第三方平台配套的單向通訊,反向隔離的通訊介面,原本確定是採用udp組播方式實現,通訊裝置中間加正向網路隔離裝置防止反通訊。我想著趕緊先行測試驗證一下,哪知我好不容易花了乙個下午編譯測試後,對接的廠家卻反饋說不再使用udp通訊,他們要用http方式,並不考慮兩個系統通訊隔離問題。我只...

linux下c 實現udp組播模式

組播 傳送的資訊,小組內所有成員都能同時接受到。組播發送端跟接收端的具體流程為 傳送方 a.建立socket socket fd socket af inet,sock dgram,0 if socket fd 0 b.設定傳送的群組的位址 set up the destination addres...