📄 sh_multicast.cpp
字号:
// SH_Multicast.cpp: implementation of the SH_Multicast class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SH_Multicast.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
SH_Multicast::SH_Multicast()
{
m_strMultiIP = _T("");
m_uPort = 0;
}
SH_Multicast::SH_Multicast(LPCTSTR cszIP,UINT uPort)
{
SetIP(cszIP);
SetPort(uPort);
}
SH_Multicast::~SH_Multicast()
{
Close();
}
BOOL SH_Multicast::CreateSender(LPCTSTR cszIP, UINT uPort)
{
SetIP(cszIP);
SetPort(uPort);
return Open(AF_INET,SOCK_DGRAM,0);
}
BOOL SH_Multicast::CreateReceiver(LPCTSTR cszIP, UINT uPort)
{
ULONG opt = 1;
SetIP(cszIP);
SetPort(uPort);
if(!Open(AF_INET,SOCK_DGRAM,0))
return FALSE;
if(!SetSockOpt(SOL_SOCKET,SO_REUSEADDR,(char*)opt,sizeof(opt)))
return FALSE;
if(!Bind(INADDR_ANY,m_uPort))
return FALSE;
if(!JoinMulticastGroup())
return FALSE;
return SelectEx(FD_READ);
}
BOOL SH_Multicast::JoinMulticastGroup()
{
return EnableMulticast(TRUE);
}
BOOL SH_Multicast::LeaveMulticastGroup()
{
return EnableMulticast(FALSE);
}
BOOL SH_Multicast::EnableMulticast(BOOL bEnabled)
{
BOOL bRet;
struct ip_mreq mreq;
mreq.imr_interface.s_addr = INADDR_ANY;
mreq.imr_multiaddr.s_addr = inet_addr(m_strMultiIP);
if(bEnabled)
bRet = SetSockOpt(IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(struct ip_mreq));
else
bRet = SetSockOpt(IPPROTO_IP,IP_DROP_MEMBERSHIP,(char*)&mreq,sizeof(struct ip_mreq));
return bRet;
}
VOID SH_Multicast::SetIP(LPCTSTR cszIP)
{
m_strMultiIP = cszIP;
}
LPCTSTR SH_Multicast::GetIP(VOID)
{
return (LPCTSTR)m_strMultiIP;
}
VOID SH_Multicast::SetPort(UINT uPort)
{
m_uPort = uPort;
}
UINT SH_Multicast::GetPort() const
{
return m_uPort;
}
int SH_Multicast::Send(const char *pSendBuf, int nBufLen)
{
struct sockaddr_in addr;
memset(&addr,0,sizeof(struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_port = htons(m_uPort);
addr.sin_addr.s_addr = inet_addr(m_strMultiIP);
return SendTo(pSendBuf,nBufLen,(struct sockaddr*)&addr,0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -