8070|4

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

双网卡下的组播通讯问题 [复制链接]

最近在做一个组播通讯的程序。我在有一个网卡的学习板上编写了程序,并且可以在PC上获得该网卡发出的数据,但是我将程序下载到有双网卡的板子上运行就会出现不能接收的问题。而后我在双网卡的板子上进行了单播和广播的测试,PC均能收到数据,唯独组播不行,请问组播程序是否有特别需要注意的地方,我用的是VxWorks6.7。
我的发送程序大致如下:
         //建立一个Socket
           if((nsendSkt = socket(AF_INET,SOCK_DGRAM,0)) == ERROR){
                   perror("netInitSend : can not open send socket\n");
                   return;
           }

         //配置本机的参数
           sockAddrSize = sizeof(struct sockaddr_in);          
           memset((char*)&myAddr, 0, sockAddrSize);
           myAddr.sin_family         = AF_INET;
           myAddr.sin_port         = htons(LOCAL_CLIENT_PORT);
           myAddr.sin_addr.s_addr = htonl(INADDR_ANY);

         //配置目标机的参数,目标的IP地址设置为组播地址
           memset((char*)&peerAddr, 0, sockAddrSize);
           peerAddr.sin_family          = AF_INET;
           peerAddr.sin_port                  = htons(LOCAL_SERVER_PORT);
           peerAddr.sin_addr.s_addr    = inet_addr(MULTICASTADDR);  //MULTICASTADDR = "224.0.9.22"
          
         //setsockopt的参数设置
           if_req.s_addr = myAddr.sin_addr.s_addr;
    if( setsockopt( nsendSkt, IPPROTO_IP, IP_MULTICAST_IF, (char*)&if_req, sizeof(struct in_addr) ) < 0 ){
        perror("setsockopt:IP_MULTICAST_IF");
        return;
    }          
    if( setsockopt( nsendSkt, IPPROTO_IP, IP_MULTICAST_LOOP, (char*)&optval, sizeof(int) ) < 0 ){
        perror("setsockopt:IP_MULTICAST_LOOP");
        return;
    }          
    if (setsockopt(        nsendSkt, SOL_SOCKET,        SO_REUSEADDR,
                        (char*)&optval, sizeof(optval)) == ERROR) {
            perror("setsockopt(SO_REUSEADDR)");
            return;
        }


         //发送程序,如果出错会提示,否则打印发送的内容
          if((sendLen = sendto(nsendSkt,
                              pBuf,
                              sendLen,0,
                              (struct sockaddr*)&peerAddr,
                               sizeof(struct sockaddr)))== ERROR){
                    perror("sendto error!!!\n");
                    continue;
            }
            else
                    printf("Send %d characters\n",sendLen);
    }


如果在双网卡的板子上运行,PC接收不到数据,sendto也未提示出错。请各位高手帮我看看,指点指点,谢谢。

最新回复

(如果是linux可以这样做,借鉴)  详情 回复 发表于 2012-9-19 16:59
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶1~~~~··~~~~~~~~~~~~~~
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
不会,帮顶下。

MARK
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
发送组播地址前用routeAdd 组播地址 发送网卡地址建立路由
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

5
 

route add -net 224.0.0.0 nemask 224.0.0.0 eth(n)

(如果是linux可以这样做,借鉴)
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表