⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_mcast.cpp

📁 实时监控
💻 CPP
字号:
#include "stdafx.h"
#include "net_mcast.h"
#include "../thrd/thrd_decoder.h"
#include "../NetDef.h"

//////////////////////////////////////////////////////////////////////////
//##ModelId=3F9A1D220247
net_mcast::net_mcast()//: mc(NULL)
{
}
//##ModelId=3F9A1D220251
net_mcast::~net_mcast()
{
	destroy();
}

//##ModelId=3F9A1D220253
bool net_mcast::create(net_addr& addr)
{
/*
	if( !net_udp::create(addr) )
		return false;
	
	net_udp::add_cb(this);
*/
	local = addr;
	return true;
}

//##ModelId=3F9A1D22025D
void net_mcast::destroy()
{
	net_udp::destroy();

	/*if( mc )
	{
		closesocket(mc);
		mc = NULL;
	}*/

}

//##ModelId=3F9A1D220284
bool net_mcast::join(net_addr& mc_addr, int ttl, BOOL loopback, BOOL image_type)
{
//	ULONG cb = 0;
	int err = 0;
	
	mcaddr = mc_addr;

	ip_mreq im;
	im.imr_interface.s_addr = local.ip();
	im.imr_multiaddr.s_addr = mc_addr.ip();

	local.set_real_port(mc_addr.port());
	if(!net_udp::create(local, image_type)) return false;

	err = setsockopt(h, 0, IP_MULTICAST_TTL, (char*)&ttl, sizeof(int));
	err = setsockopt(h, 0, IP_MULTICAST_LOOP, (char*)&loopback, sizeof(BOOL));
	
	//						IP_ADD_MEMBERSHIP, WS11:(5) WS22:(12)
	int iam = IP_ADD_MEMBERSHIP;
	err = setsockopt(h, 0,	IP_ADD_MEMBERSHIP, (char*)&im, sizeof(im));

	err = WSAGetLastError();

	return err != SOCKET_ERROR;
}

//##ModelId=3F9A1D220298
void net_mcast::leave()
{
	ip_mreq im;
	im.imr_interface.s_addr = local.ip();
	im.imr_multiaddr.s_addr = mcaddr.ip();
	//							IP_DROP_MEMBERSHIP WS11:(6) WS22(13)
	int err = setsockopt(h, 0,	IP_DROP_MEMBERSHIP, (char*)&im, sizeof(im) );
}

//##ModelId=3F9A1D220266
DWORD net_mcast::send(byte* buf, int length, net_addr& target)
{
	return net_udp::send(buf, length, target);
}

//##ModelId=3F9A1D220279
DWORD net_mcast::recv(byte* buf, net_addr* from /* = NULL */)
{
	return net_udp::recv(buf, from);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -