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

📄 sh_multicast.cpp

📁 rsa算法打的一个包
💻 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 + -