3950|4

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

vxworks下的多播程序问题 [复制链接]

 

  1. #include "sockLib.h"
  2. #include "iostream.h"
  3. #include "vxWorks.h"
  4. #include "inetLib.h"
  5. #include "taskLib.h"

  6. #define MCastAddr "234.5.6.7"
  7. #define MaxLine 1024

  8. void main()
  9. {
  10.         struct sockaddr_in local;

  11.         int recvsocket;
  12.         struct ip_mreq mcast;
  13.         recvsocket=socket(AF_INET,SOCK_DGRAM,0);

  14.         local.sin_family=AF_INET;
  15.         local.sin_port=htons(2009);
  16.         local.sin_addr.s_addr=htonl(INADDR_ANY);
  17.         mcast.imr_interface.s_addr=htonl(INADDR_ANY);
  18.         mcast.imr_multiaddr.s_addr=inet_addr(MCastAddr);

  19.         bind(recvsocket,(struct sockaddr*)&local,sizeof(local));

  20.         setsockopt(recvsocket,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mcast,sizeof(mcast));

  21.         char RecvBuffer[MaxLine]={0};
  22.         int i=1;
  23.         while(1)
  24.         {
  25.                 int n=recvfrom(recvsocket,RecvBuffer,MaxLine,0,NULL,NULL);
  26.                 RecvBuffer[n]='\0';
  27.                 cout<<"receive:"<
  28.         }
  29. }
复制代码

为何程序在recvfrom老是不阻塞,一直的死循环输出。我并没有send数据给它啊。
发送程序为:

  1. #include
  2. #include

  3. #define MCastAddr "234.5.6.7"
  4. #define MaxLine 1024


  5. void main()
  6. {
  7.         WSADATA wsadata;
  8.         int ret=WSAStartup(MAKEWORD(1,0),&wsadata);
  9.         if(ret!=0)
  10.                 return;
  11.        
  12.         struct sockaddr_in mcastaddr;
  13.         SOCKET sendsocket;
  14.        
  15.         sendsocket=socket(AF_INET,SOCK_DGRAM,0);
  16.        
  17.         mcastaddr.sin_family=AF_INET;
  18.         mcastaddr.sin_port=htons(2009);
  19.         mcastaddr.sin_addr.s_addr=inet_addr(MCastAddr);

  20.         char SendBuffer[MaxLine]="hello";
  21.         for(int i=0;i<1000;i++)
  22.         {
  23.                 cout<
  24.                 int n=sendto(sendsocket,SendBuffer,strlen(SendBuffer),0,(struct sockaddr *) &mcastaddr,sizeof(mcastaddr));
  25.                 Sleep(500);
  26.         }
  27. }
复制代码

发送端在windows系统下,接收端在vxworks系统下。

最新回复

经典 酷!   详情 回复 发表于 2009-9-25 04:46
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
为何程序在recvfrom老是不阻塞,一直的死循环输出。我并没有send数据给它啊。 ?

应该有超时等情况的。

recvfrom的返回值的含义都有哪些?

正确的处理方法应该是根据返回值来进行相应的处理。

while(1)
    {
        int n;
         
        n = recvfrom(recvsocket,RecvBuffer,MaxLine,0,NULL,NULL);
        
        if (XXX == n) /* 接收到数据对应的返回值 */
             cout<<"receive:"<
        ... ...
        
    }
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼上的兄弟说的对,定义有问题的
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
你的情况是自发自收。
改个端口号试试。接收端口号和发送端口号不同。
应该就会阻塞。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
经典 酷!
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表