7178|6

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

vxworks 组播不能接收数据,在线等.... [复制链接]

 代码如下:
        struct sockaddr_in addrHost;
        struct sockaddr_in addrFrom;
        ULONG l;
        SOCKET s ;
        fd_set ReadSet ;
        struct ip_mreq      mcast;
        int width = 0 ;
        struct timeval timeOut ;
        char  netReceiveBuf[NET_BUF] ;
        ULONG sourceIp ;
        USHORT sourcePort ;
        char sendBuf[]= "this is a test" ;
        int addrSize = sizeof(addrFrom) ;
       
        s = socket(AF_INET, SOCK_DGRAM, 0);
        if(s == ERROR)
                return ;

        timeOut.tv_sec = 10 ;
        timeOut.tv_usec = 0 ;

        memset(&addrHost, 0, sizeof(struct sockaddr_in));
       
        addrHost.sin_family = AF_INET;
        addrHost.sin_port =        htons(7777);
        addrHost.sin_addr.s_addr = inet_addr("192.100.89.185");
       
        if(bind(s, (struct sockaddr*)(&addrHost), sizeof(addrHost)) < 0)
        {
                close(s) ;
                return ;
        }
       

        mcast.imr_multiaddr.s_addr = inet_addr("224.1.0.1");
    mcast.imr_interface.s_addr = inet_addr("192.100.89.185");
       
    if (setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
        (char *)&mcast, sizeof(mcast)) == ERROR)
    {
        printf("setsockopt(IP_ADD_MEMBERSHIP) failed:n");
        close(s);

        return ;
    }

        FD_ZERO(&ReadSet) ;
        FD_SET(s , &ReadSet) ;
        width = s ;
        width++ ;

        if (select(width , &ReadSet , NULL , NULL , &timeOut) == 0)
        {
                perror("Ssmr_CarCommunication:select timeOut , carNet error. \n");
                close(s);
                return ;
        }

        memset(netReceiveBuf , 0 , NET_BUF) ;
        if (FD_ISSET(s , &ReadSet))
        {
                recvfrom(s, netReceiveBuf , NET_BUF , 0 , (struct sockaddr *)&addrFrom , &addrSize) ;
       
        }

        if (setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP,
        (char *)&mcast, sizeof(mcast)) == ERROR)
    {
                printf("setsockopt(IP_ADD_MEMBERSHIP) failed:n");
        close(s);
    }
        close(s) ;



程序运行到select时就停止,等待timeOut之后就返回。说明socket没有接收到数据。请问vxworks组播接收数据还要进行什么设置??
另,利用此socket可以发送数据到组播地址。
谢谢。

最新回复

不收组播包有可能是网口初始化的时候初始化时,网络设备初始化选项配置当中配置选项没有设置。 例如:如果网络设备配置为非混杂模式,那么这个网络设备只收目的MAC为自己的报文(也收广播);如果配置为 混杂模式,那么对目的MAC基本上没有什么限制。你仔细查查是否在phy层就直接将组播包丢弃了。 当然了,一般你是看不到统计,仔细看看网络设备的初始化。  详情 回复 发表于 2009-5-31 09:58
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个问题似乎以前有人问过,呼唤高手出现。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
自己顶
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(初级)

4
 
绑定的时候不要指定本地地址,再试试:)
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
try this
mcast.imr_interface.s_addr = inet_addr(INADDR_ANY);

 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
vxworks 交流群84134443
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
不收组播包有可能是网口初始化的时候初始化时,网络设备初始化选项配置当中配置选项没有设置。
例如:如果网络设备配置为非混杂模式,那么这个网络设备只收目的MAC为自己的报文(也收广播);如果配置为
混杂模式,那么对目的MAC基本上没有什么限制。你仔细查查是否在phy层就直接将组播包丢弃了。
当然了,一般你是看不到统计,仔细看看网络设备的初始化。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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