用法:cmulticast cast("225.6.7.8", 7000);
cast.startup();cast.send(...); //向組播傳送資料報
cast.onreceive(繫結**函式);cast.listen(); //為資料接收啟動監聽
cast.shutdown();**:
#ifndef weisunding_multicast#define weisunding_multicast
#include
#pragma comment(lib,"ws2_32.lib")
#define buffer_size 65535
//-----------------------------------
//描述:乙個實現多播的類
//日期:2005-8-1
//-----------------------------------
class cmulticast
}void send(const
char*lpbuffer,int size)
//繫結資料接收事件
void onreceive(lponreceive lpcallback)
//為資料接收啟動監聽
void listen()
static
int listenproc(lpvoid lpparam)
}return
0;
}bool startup()
int m_optval=1;int m_cbret=0;if(wsaioctl(m_socket,sio_multicast_scope, &m_optval,sizeof(m_optval),null,null, (unsigned long*)&m_cbret,null,null) ==socket_error)
m_addrgroup.sin_family=af_inet;m_addrgroup.sin_port=htons(m_castport);m_addrgroup.sin_addr.s_un.s_addr=inet_addr(m_lpcastip);ret=wsajoinleaf(m_socket, (psockaddr)&m_addrgroup,sizeof(sockaddr_in),null,null,null,null,jl_both);if(ret==invalid_socket)
returntrue;
}void shutdown()
catch(...)
}closehandle(m_hthread);m_hthread=null;
}closesocket(m_socket);
}
~cmulticast()
};#endif
隨機生成乙個多播位址
網路位址字串 以數字和點組成的字串,例如 163.13.132.68 網路位址字串 232.0.1.0 轉 二進位制 0xe8000100 const char cp 232.0.1.0 unsigned long int aa inet addr cp printf aa x n htonl aa...
加入乙個多播組 最簡單的情況
應用程式通過命令字ip add membership把乙個socket加入到乙個多播組,ip add membership是乙個ip層的命令字,其呼叫使用的引數是結構體struct ip mreq,其定義如下 struct ip mreq 該結構體的兩個成員分別用於指定所加入的多播組的組ip位址,和...
乙個簡單的C 多播委託的小例子
多播委託是指乙個由委託串成的鍊錶,當鍊表上的乙個委託被 時,所有鍊錶上該委託的後續委託將會被順序執行。需要注意,多播委託必須是同型別的,返回型別必須為void,並且不能帶輸入引數 但可以帶引用引數 system.muliticastdelegate定義了對多播委託的支援。class program ...