• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 298  文章 - 377  trackbacks - 0
            <2007年8月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            Multicasting

            多播通訊讓網絡客戶充分享受了廣播的便捷而又不用再擔心網絡會被風暴阻塞,所有這一切都歸功于 IGMP 協議的實施。
            多播地址是一個D類的IP地址(224.0.0.0-239.255.255.255),其中有一些是為特殊用途而分配的,詳細分配情況請參考 RFC1700。
            這里只講述IP多播。IP多播是無根多播,下面只羅列簡單的程序實現,詳細的規范請參考相應的文檔。

            #define MCASTADDR "234.5.6.7"
            #define MCASTPORT 65500
            #define COMMBUFSIZE 1024

            // 使用Winsock2
            if(WSAStartup(MAKEWORD(2,2),&wsd)!=0) return FALSE;
            // 創建多播套接字
            SOCKET sock=WSASocket(AF_INET,
            SOCK_DGRAM,
            0,
            NULL,
            0,
            WSA_FLAG_MULTIPOINT_C_LEAF|
            WSA_FLAG_MULTIPOINT_D_LEAF|
            WSA_FLAG_OVERLAPPED);
            // 綁定套接字
            SOCKADDR_IN saiLocal;
            saiLocal.sin_family=AF_INET;
            saiLocal.sin_port=htons(MCASTPORT);
            saiLocal.sin_addr.S_un.S_addr=INADDR_ANY;
            if(bind(sock,(SOCKADDR*)&saiLocal,sizeof(saiLocal))==SOCKET_ERROR) return FALSE;
            // 設置套接字選項
            unsigned long ulNoneBlockingIO=1;
            if(SOCKET_ERROR==ioctlsocket(sock, FIONBIO,&ulNoneBlockingIO)) return FALSE;
            // Set TTL to 8
            int nOpt=8;
            if(setsockopt(sock,IPPROTO_IP,IP_MULTICAST_TTL,(char*)&nOpt,sizeof(nOpt))==SOCKET_ERROR) return FALSE;
            // Set Loopback
            if(m_bLoopBack)
            {
            BOOL bOpt=0;
            if(setsockopt(sock,IPPROTO_IP,IP_MULTICAST_LOOP,(char*)&bOpt,sizeof(bOpt))==SOCKET_ERROR) return FALSE;
            }
            // 加入多播組
            m_saiRemote.sin_family=AF_INET;
            m_saiRemote.sin_port=htons(MCASTPORT);
            m_saiRemote.sin_addr.S_un.S_addr=inet_addr(MCASTADDR);
            DWORD dwFlags=(m_bSender)?JL_SENDER_ONLY:JL_RECEIVER_ONLY;
            SOCKET sockM=WSAJoinLeaf(sock,(SOCKADDR*)&m_saiRemote,sizeof(m_saiRemote),NULL,NULL,NULL, NULL,dwFlags);
            if(sockM==INVALID_SOCKET)
            {
            closesocket(sock);
            WSACleanup();
            return FALSE;
            }
            // 發送
            int nRet=sendto(sock,(char*)pBuf,len,0,(SOCKADDR*)&m_saiRemote,sizeof(m_saiRemote));
            // 接收
            SOCKADDR_IN sai_From;
            int len = sizeof(sai_From);
            BYTE buf[COMMBUFSIZE]={'\0'};
            int nRetRecv=recvfrom(sock,(char*)buf,COMMBUFSIZE,0,(SOCKADDR*)&sai_From,&len);
            // 結束

            // 附上一個配置函數
            #include "Winsock2.h"
            #include "Ws2tcpip.h"

            #include "iprtrmib.h"
            #include "ipexport.h"
            #include "iptypes.h"
            #include "iphlpapi.h"

            #pragma comment(lib,"ws2_32.lib"
            #pragma comment(lib,"iphlpapi.lib"

            typedef struct tagNIC
            {
            int nNum; // 多少塊網卡
            unsigned char szHostName[150]; // 主機名
            unsigned char szAddr[7*10]; // 每塊網卡地址以 0為間隔255.255.255.255.
            unsigned char szMac[7*10]; // 每塊網卡MAC地址0為間隔0x000x040x760x3F0x5F0xA9.
            }
            NICADDR,*LPNICADDR;

            typedef struct tagConfigParam
            {
            BOOL  bSender; // [IN] 是發送還是接收
            char* pszMcastAddr; // [IN] 多播組地址
            WORD  wMcastPort; // [IN] 多播端口
            NICADDR stuAddr; // [OUT]本地網卡地址信息,函數回填
            }
            CONFIGPARAM,*LPCONFIGPARAM;

            void FuncConfig(CONFIGPARAM* pParam)
            {
            m_bSender=pParam->bSender;
            if(pParam->pszMcastAddr!=NULL)
            m_dwMulticastGroup=inet_addr(pParam->pszMcastAddr);
            if(pParam->wMcastPort!=0)
            m_dwPort=pParam->wMcastPort;
            memset(&(pParam->stuAddr),0,sizeof(NICADDR));
            char name[MAX_PATH]={'\0'};
            if(0==gethostname(name,MAX_PATH))
            {
            if(strlen(name)>0) strcpy((char*)pParam->stuAddr.szHostName,name);
            HOSTENT* HostEnt;
            HostEnt=gethostbyname(name);
            int n=0;
            int m=0;
            BOOL bNoConnected=TRUE;
            if(HostEnt!=NULL)
            {
            IP_ADAPTER_INFO AdapterInfo[16];
            PIP_ADAPTER_INFO pAdapterInfo;
            DWORD dwBufLen=sizeof(AdapterInfo);

            DWORD dwRet=GetAdaptersInfo(
            AdapterInfo,
            &dwBufLen);
            if(dwRet==ERROR_SUCCESS) pAdapterInfo=AdapterInfo;

            for(int i=0;HostEnt->h_addr_list[i]!=NULL;i++)
            {
            in_addr ia;
            memset(&ia,0,sizeof(ia));
            ia.S_un.S_addr = *((unsigned long*)HostEnt->h_addr_list[i]);
            char* pszIP = inet_ntoa(ia);
            int nLen=strlen(pszIP);
            memmove(pParam->stuAddr.szAddr+n,pszIP,nLen);
            n+=strlen(pszIP);
            n++;

            if(dwRet==ERROR_SUCCESS)
            {
            if(pAdapterInfo)
            {
            memmove(pParam->stuAddr.szMac+m,pAdapterInfo->Address,6);
            pAdapterInfo=pAdapterInfo->Next;
            m+=7;
            }
            }

            pParam->stuAddr.nNum++;
            }
            }
            }
            }
            posted on 2007-08-17 13:18 聶文龍 閱讀(441) 評論(0)  編輯 收藏 引用 所屬分類: net work
            亚洲伊人久久大香线蕉综合图片| 免费精品久久久久久中文字幕| 久久久久亚洲av综合波多野结衣| 久久久久久国产精品美女| 亚洲欧美日韩精品久久亚洲区| 国产亚洲美女精品久久久2020| 久久久久久国产精品无码超碰| 狠狠色丁香婷婷综合久久来来去 | 国产亚洲精品久久久久秋霞| 亚洲国产精品无码久久SM| 国产午夜精品久久久久九九| 精品久久久久久中文字幕大豆网| 69国产成人综合久久精品| 久久久久久久97| 久久久国产精华液| 国内精品九九久久久精品| 性欧美大战久久久久久久| 国产99久久久国产精品~~牛| 少妇高潮惨叫久久久久久| 久久久无码精品亚洲日韩软件| 99re久久精品国产首页2020| 99久久国产亚洲综合精品| 久久精品综合一区二区三区| 久久ww精品w免费人成| 久久人人爽人人爽人人片AV麻烦| 久久精品亚洲乱码伦伦中文| 热久久国产精品| 久久免费精品视频| 久久精品国内一区二区三区| 人妻无码中文久久久久专区| 久久综合综合久久综合| 亚洲国产精品一区二区久久hs | 国产精品成人久久久久三级午夜电影| 亚洲中文字幕无码久久2020| 日本WV一本一道久久香蕉| 伊人 久久 精品| 国产成人无码精品久久久性色 | 亚洲AV无码1区2区久久| 99久久99久久精品国产片果冻| 伊人久久精品影院| 性欧美丰满熟妇XXXX性久久久|