ip組播通訊需要乙個特殊的組播位址,ip組播位址是一組d類ip位址,範圍從224.0.0.0 到 239.255.255.255。其中還有很多位址是為特殊的目的保留的。224.0.0.0到224.0.0.255的位址最好不要用,因為他們大多是為了特殊的目的保持的(比如igmp協議)。
igmp是ip組播的基礎。在ip協議出現以後為了加入對組播的支援,igmp產生了。igmp所做的實際上就是告訴路由器,在這個路由器所在的子網內有 人對傳送到某乙個組播組的資料感興趣,這樣當這個組播組的資料到達後面,路由器就不會拋棄它,而是把他轉送給所有感興趣的客戶。假如不同子網內的a和b要 進行組播通訊,那麼位於ab之間的所有路由器必須都要支援igmp協議,否則ab之間不能進行通訊。
利用c#實現udp組播的基本步驟為:
(1)建立socket;
(2)socket和埠繫結;
(3)加入乙個組播組國;
(4)通過sendto / recvfrom進行資料的收發;
(5)關閉socket。
下面是簡單的示例:
(1)傳送示例:
ipaddress ip = ipaddress.parse("226.1.1.2");
socket s = new socket(addressfamily.internetwork, sockettype.dgram, protocoltype.udp);
s.setsocketoption(socketoptionlevel.ip, socketoptionname.multicasttimetolive, 1);
ipendpoint ipep = new ipendpoint(ip, 5000);
......
s.sendto(buff, buff.length, socketflags.none, ipep);
......
s.close();
(2)接收示例:
socket s = new socket(addressfamily.internetwork, sockettype.dgram, protocoltype.udp);
ipendpoint ipep = new ipendpoint(ipaddress.any, 5980);
s.bind(ipep);
s.setsocketoption(socketoptionlevel.ip, socketoptionname.addmembership,
new multicastoption(ipaddress.parse("226.1.1.2"), ipaddress.any));
......
s.receive(b, 4, socketflags.none);
......
s.close();
特定源組播(source specific multicast, ssm)提供給主機應用程式乙個「通道」抽象,每個通道擁有乙個源和多個接收者。組播源可以傳送乙個ip報文給ssm目的位址g,接受者可以加入通道(s,g)來接收該報文。ipv4位址範圍232/8已經被iana分配給ssm服務。使用c#實現特定源組播時,需要設定socketoption引數,具體設定如下:
byte membershipaddresses = new byte[12]; // 3 ips * 4 bytes (ipv4)
buffer.blockcopy(multicastip.getaddressbytes(), 0, membershipaddresses, 0, 4); //組播位址
buffer.blockcopy(sourceip.getaddressbytes(), 0, membershipaddresses, 4, 4); //組播源位址
buffer.blockcopy(localip.getaddressbytes(), 0, membershipaddresses, 8, 4); //本地接收位址
socket.setsocketoption(socketoptionlevel.ip, socketoptionname.addsourcemembership, membershipaddresses);
C語言如何實現任意數相乘
基本思路 用int型陣列num的某一位乘以另外乙個int陣列num1的所有位,然後將值暫時放在int型陣列num2,陣列num從第零位開始乘,直到最後一位,每移動一位,陣列num2裡面的資料更新一次。任意兩個小於100位數相乘,修改max值可實現更大的數相乘 include include defi...
C 實現任意表達時候求值(棧)
今天花了大概四個小時時間,用棧 stack 實現了 任意表示式的值計算 的問題。c 比 c 好的一點就是,c 的stl定義了大量的資料型別和演算法,相比於 c 更加視覺化。實現這個的基本思路很簡單 分成兩部分完成。兩個主要函式 string shorten string m 把 string m 由...
c 實現任意型別陣列類的封裝
myarray.hpp pragma once include includeusing namespace std templateclass myarray myarray const myarray array myarray 賦值操作符過載 防止淺拷貝 myarray operator my...