CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

socket 组播 求救!!!(40分)

楼主chen_chen_silence()2006-06-01 14:52:28 在 VC/MFC / 基础类 提问

大家看看我这段代码哪里有问题,怎么从组播网里收不到数据呢?哪里出现问题了!!??大家帮忙看看(这是客户端)  
  void   main(void)  
  {  
  WSADATA   wwsd;  
  SOCKADDR_IN   local;  
  SOCKADDR_IN   from;  
  ip_mreq   mcast;  
  SOCKET   sockM;  
  char   recvbuf[BUFSIZE];  
  int   len=   sizeof(SOCKADDR_IN);  
  int   optval;  
  int   ret;  
   
   
  //启动服务  
  if(WSAStartup(MAKEWORD(1,1),&wwsd)!=0)  
  {  
  cout<<"WSAStartUp   failed"<<endl;  
  return;  
  }  
  //创建套节字  
  if((sockM=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)  
  {  
  cout<<"sockey   failed"<<endl;  
  WSACleanup();  
  return;  
  }  
  BOOL   bMultipleApps   =   TRUE; /*   allow   reuse   of   local   port   if   needed   */  
  if(setsockopt(sockM,   SOL_SOCKET,SO_REUSEADDR,   (char   *)&bMultipleApps,   sizeof(BOOL))==SOCKET_ERROR)  
  {  
  cout<<"setsockopt(SO_REUSEADDR)   failed"<<endl;  
  closesocket(sockM);  
  WSACleanup();  
  return;  
  }  
  //设定数据传送时间  
  optval=8;  
  if(setsockopt(sockM,IPPROTO_IP,IP_MULTICAST_TTL,(char   FAR   *)&optval,sizeof(int))==SOCKET_ERROR)  
  {  
  cout<<"setsockopt   (IP_MULTICAST_TTL)   failed"<<endl;  
  closesocket(sockM);  
  WSACleanup();  
  return;  
  }  
  bLoopBack=FALSE;  
  if(bLoopBack)//设定回传  
  {  
  optval=0;  
  if(setsockopt(sockM,IPPROTO_IP,IP_MULTICAST_LOOP,(char   FAR*)&optval,sizeof(optval))==SOCKET_ERROR)  
  {  
  cout<<"setsockopt(IP_MULTICAST_LOOP)   failed"<<endl;  
  closesocket(sockM);  
  WSACleanup();  
  return;  
  }  
  }  
  local.sin_family=AF_INET;  
  local.sin_port   =htons(5000);  
  local.sin_addr.s_addr   =htonl(INADDR_ANY);  
  //邦定本地端口  
  if(bind(sockM,(SOCKADDR   *)&local,sizeof(local))==SOCKET_ERROR)  
  {  
  cout<<"bind   failed"<<endl;  
  closesocket(sockM);  
  WSACleanup();  
  return;  
  }  
   
  mcast.imr_multiaddr.s_addr=inet_addr("234.5.6.7"); //多播组地址  
  mcast.imr_interface.s_addr=htonl(INADDR_ANY); //本地地址  
  //加入组播组  
  if(setsockopt(sockM,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char   FAR   *)&mcast,sizeof(mcast))==SOCKET_ERROR)  
  {  
  cout<<"setsockopt(IP_ADD_MEMBERSHIP)   failed!"<<endl;  
  closesocket(sockM);  
  WSACleanup();  
  return;  
  }  
  dwCount=4;  
  bSender=false;  
  //接收数据  
  if(!bSender)  
  {  
  //Receive   some   data  
  //  
  for(i=0;i<dwCount;i++)  
  {  
  if((ret=recvfrom(sockM,recvbuf,BUFSIZE,0,(SOCKADDR   *)&from,   &len))==SOCKET_ERROR)  
  {  
  cout<<"recvfrom   failed!"<<endl;  
  closesocket(sockM);  
  WSACleanup();  
  return;  
  }  
  recvbuf[ret]=0;  
  cout<<"Recv:"<<recvbuf<<"       from"<<inet_ntoa(from.sin_addr);  
  }  
  }  
  //Drop   group   membership  
  //离开组播组  
  if(setsockopt(sockM,IPPROTO_IP,IP_DROP_MEMBERSHIP,(char   *)&mcast,sizeof(mcast))==SOCKET_ERROR)  
  {  
  cout<<"setsockopt(IP_DROP_MEMBERSHIP)   failed"<<endl;  
  }  
  //关闭注销套节字  
  closesocket(sockM);  
  //关闭服务  
  WSACleanup();  
  return;  
  } 问题点数:40、回复次数:9Top

1 楼chen_chen_silence()回复于 2006-06-01 15:02:00 得分 0

自己顶一下!Top

2 楼0delphi(睡个舒服觉)回复于 2006-06-01 15:24:56 得分 0

因为你只是客户端之接受  
  把   设置发送时间   和设定回转   那两段代码注释应该就可以了Top

3 楼0delphi(睡个舒服觉)回复于 2006-06-01 15:30:14 得分 5

更正一下  
   
  你是本机发送,本机接受吗??   如果是在发送的时候要设置回转的  
  在接受的客户端就不要设置这些了Top

4 楼starytx(此地禁止大小便,违者没收工具!)回复于 2006-06-01 15:35:19 得分 35

cout<<"Recv:"<<recvbuf<<"       from"<<inet_ntoa(from.sin_addr);出现了问题inet_ntoa(from.sin_addr);不对,你引掉就可以了Top

5 楼chen_chen_silence()回复于 2006-06-01 15:38:34 得分 0

感谢starytx(某某人)   ,更改正确Top

6 楼0delphi(睡个舒服觉)回复于 2006-06-01 15:56:34 得分 0

这个问题把我搞蒙了  
  楼主把   地址   该成   224.1.1.1   就行了  
  换其它的好象都不行  
  等我找找原因Top

7 楼chen_chen_silence()回复于 2006-06-01 16:02:00 得分 0

0delphi(睡个舒服觉)不是拉,不过仍然谢谢你,多播的地址范围好像从224.0.0.0到239.255.255.255但是其中几个不能用Top

8 楼0delphi(睡个舒服觉)回复于 2006-06-01 16:15:09 得分 0

冷汗Top

9 楼0delphi(睡个舒服觉)回复于 2006-06-01 16:41:54 得分 0

出现了问题inet_ntoa(from.sin_addr);不对,你引掉就可以了  
   
  不好意思,不知道这样会出什么问题  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:chen_chen_silence
  • 0delphi
  • starytx

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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