CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  网络通信

关于组播问题,急急急!

楼主zengkan(侃子)2001-06-29 18:55:12 在 专题开发/技术/项目 / 网络通信 提问

谁能给我一套创建点对多点和多点对多点的组播模型的代码? 问题点数:36、回复次数:1Top

1 楼caiyi9000(小猫)回复于 2001-06-30 15:09:11 得分 36

给你一个接口函数,它创建一个单向发送或单向接收或双向发送和接收的组播socket  
  BOOL   McSocket::Create   (int   McFlag)  
  //McFlag:组播类型  
  {  
          //make   sure   the   protocol   and   capacity   exit  
          WORD   wVersionRequested;                   //request   version   of   winsock  
  WSADATA   wsaData;       //returned   sock   data            
  int   rightsock=0;  
  int   ret;    
   
          WSAPROTOCOL_INFO*   Proto_Info=NULL;  
  DWORD   length=0;  
  BOOL   Multicast_Supported=FALSE;  
  INT   iProto[2];  
   
  wVersionRequested   =   MAKEWORD(   2,2);    
          ret   =   WSAStartup(   wVersionRequested,   &wsaData   );     //initial   winsock  
  if   (   ret   !=   0   )    
  {  
  m_Errmsg="Winsock   启动失败";  
  return   FALSE;  
  }                                                              
  else   if   (   LOBYTE(   wsaData.wVersion   )   !=   2   ||HIBYTE(   wsaData.wVersion   )   !=   2   )   //check   version  
  {  
          m_Errmsg="Winsock   版本不对,请使用WINSOCK2.2";  
  WSACleanup(   );  
  return   FALSE;  
          }    
          else   //check   protocol   and   capacity                                                            
  {  
           
  iProto[0]=IPPROTO_UDP;  
          iProto[1]=NULL;  
   
          ret=WSAEnumProtocols(iProto,   (LPWSAPROTOCOL_INFO)Proto_Info,&length);  
                  if(ret==SOCKET_ERROR   &&   WSAGetLastError()   ==WSAENOBUFS)  
  {  
  Proto_Info=new   WSAPROTOCOL_INFO[length/sizeof(WSAPROTOCOL_INFO)];  
  if(Proto_Info==NULL)  
  {  
  m_Errmsg="申请内存时出错";  
  WSACleanup();  
  return   FALSE;  
  }  
  ret=WSAEnumProtocols(iProto,   (LPWSAPROTOCOL_INFO)Proto_Info,&length);  
          if(ret==SOCKET_ERROR)  
  {  
  ret=WSAGetLastError();  
  m_Errmsg.Format("无法读取协议信息,错误代码:%d",ret);  
          delete[]   Proto_Info;  
  WSACleanup();  
  return   FALSE;  
  }  
  }  
  //mod   1/9 else  
  //mod   1/9 {  
  for(int   j=0;j<ret;j++)  
  {  
  if(Proto_Info[j].dwServiceFlags1   &   XP1_SUPPORT_MULTIPOINT   !=0    
  &&   Proto_Info[j].iAddressFamily==AF_INET   )  
  {  
  Multicast_Supported=TRUE;  
  rightsock=j;  
  break;         ///mod   1/9   IMPORTANT!!!!  
  }  
  }  
  if(!Multicast_Supported)  
  {  
  m_Errmsg="系统不支持组播或无相应协议";  
  WSACleanup();  
  return   FALSE;  
  }  
  //mod   1/9 }  
   
  }  
   
          //create   a   multipoint   socket  
  m_Socket=WSASocket(FROM_PROTOCOL_INFO   ,  
                                        FROM_PROTOCOL_INFO   ,  
                  FROM_PROTOCOL_INFO   ,  
        (LPWSAPROTOCOL_INFO)&(Proto_Info[rightsock]),  
        0,  
        WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF);  
   
  if(m_Socket==INVALID_SOCKET)  
          {  
  ret=WSAGetLastError();  
  m_Errmsg.Format("创建SOCKET时发生异常,错误代码:%d",ret);  
  delete[]   Proto_Info;  
  WSACleanup(   );  
  return   FALSE;  
  }  
  delete[]   Proto_Info;  
   
  //set   the   socket   notification   message  
  if(WSAAsyncSelect(m_Socket,m_hWnd   ,IP_EVENT,FD_CONNECT   |   FD_CLOSE   |   FD_WRITE   |   FD_READ)==SOCKET_ERROR   )  
  {  
  ret=WSAGetLastError();  
  m_Errmsg.Format(   "在设定操作通知时出错,错误代码:%d",ret);  
   
  closesocket(m_Socket);  
  WSACleanup(   );  
  return   FALSE;  
  }  
           
  //假如一个多播组  
  if(WSAJoinLeaf(m_Socket,   (struct   sockaddr   FAR   *   )&m_MultiGroup,   sizeof(sockaddr),   NULL,   NULL,   NULL,   NULL,   McFlag)   ==   INVALID_SOCKET)  
  {  
  ret=WSAGetLastError();  
  m_Errmsg.Format("   加入多点组时出错,错误代码:%d",ret);  
   
  closesocket(m_Socket);  
  WSACleanup(   );  
  return   FALSE;  
  }  
          return   TRUE;  
  }  
  Top

相关问题

  • 关于多媒提组播的几个问题,急急急!!!!
  • 组播-----急!!!!!!
  • 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急
  • 急急急急急急急急急急~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!!!
  • 急急急急急急急急急急!
  • 急急急急急急急急急急!!!!!!!
  • 急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
  • 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急,VB菜鸟问,急急急急急急急急急急急急急急急急急急急急急急急急急急急急
  • 急!急!急!急!急!急!急!
  • 急急急急急急急??????

关键词

  • winsock
  • 组播
  • iproto
  • wsadata
  • wversionrequested
  • ret
  • info

得分解答快速导航

  • 帖主:zengkan
  • caiyi9000

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo