乙個實現多播的類 CMultiCast

2021-04-02 02:36:39 字數 1937 閱讀 7249

用法:

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 ...