查看: 5971|回复: 6

[MQX] MQX UDP如何接收特定端口的广播信息

[复制链接]

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
34
最后登录
1970-1-1
发表于 2014-10-8 13:58:43 | 显示全部楼层 |阅读模式
需要k60使用UDP接收广播信息,建立链接。
比如k60接收从192.168.1.255 5055端口接收广播信息
怎样配置?
我的配置只能接收到点对点的udp信息报
附上代码

int connect_UDP()
{
       
        uint_32                        cmd_reply_len;                
               
    uint_32                sock,sendsock;
        uint_16                        rlen;

    IPCFG_IP_ADDRESS_DATA    ip_data;
    _enet_address            enet_addr = ENET_MAC;

    sockaddr_in            addr;
    sockaddr_in                dest_addr;
    uint_32                error, option;
    MQX_FILE_PTR           sockfd, telnetfd;
    _mqx_uint              echoflag = IO_SERIAL_ECHO;

    char                 senddata[128] = "mesh gate connected!\r\n";
    char        recvdata[512];
    int                         count;
    int             num,pRcv;



//    _RTCSPCB_init          = 3;
//    _RTCS_msgpool_init     = 3;
//    _RTCS_socket_part_init = 3;
       
       
       
    memset(recvdata,0,sizeof(recvdata));

    error = RTCS_create();
    if (error != RTCS_OK)
    {
       fputs("Fatal Error: RTCS initialization failed.", stderr);
       _task_block();
    }
    ip_data.ip = ENET_IPADDR;
    ip_data.mask = ENET_IPMASK;
    ip_data.gateway = ENET_IPGATEWAY;



    ENET_get_mac_address (BSP_DEFAULT_ENET_DEVICE, ENET_IPADDR, enet_addr);


    error = ipcfg_init_device(BSP_DEFAULT_ENET_DEVICE, enet_addr);
    if (error != IPCFG_OK)
    {
        fprintf(stderr, "Fatal Error 0x%X: Network device initialization failed.\n", error);
        _task_block();
    }


    error = ipcfg_bind_staticip(BSP_DEFAULT_ENET_DEVICE, &ip_data);
    if (error != IPCFG_OK)
    {
        fprintf(stderr, "Fatal Error 0x%X: IP address binding failed.", error);
        _task_block();
    }


    /* Install device drivers for socket and telnet I/O */
    //_io_socket_install("socket:");

        sendsock = socket(PF_INET, SOCK_DGRAM, 0);

    /* Bind the socket to the Telnet port */
    addr.sin_family      = AF_INET;
    addr.sin_port        = 5055;
    //addr.sin_addr.s_addr = ENET_IPADDR;                   //INADDR_BROADCAST
        addr.sin_addr.s_addr = INADDR_ANY;

    dest_addr.sin_family        = AF_INET;       
    dest_addr.sin_port        = 5055;                         
    dest_addr.sin_addr.s_addr = IPADDR(192,168,1,112);
       
       
        option = 1;
        //setsockopt(sendsock,SOL_SOCKET,OPT_RECEIVE_PUSH,&option,sizeof(option));
       
    error = bind(sendsock, &addr, sizeof(addr)); //return_error_if(error != RTCS_OK)
       
        _time_delay(100);
        rlen = sizeof(dest_addr);
        //sendto(sendsock, senddata, strlen(senddata), 0,&dest_addr, rlen);
        while(1)
        {
                count = recvfrom(sendsock, recvdata, 512, 0, (struct sockaddr *) &dest_addr,&rlen);
                if(count == RTCS_ERROR)
                {
                        ;
                }
                else
                {
                        if(count>0)
                        {
                                //_io_write(serial4_fd, recvdata, count);
                                //_time_delay(1000);
                                //memset(recvdata,0,sizeof(recvdata));
                                //count = 0;
                                                               
                                //cmd_reply_len = phone_cmd_analsys((uint_8*)recvdata,count);
                                //sendto(sendsock, phone_reply, cmd_reply_len, 0,&dest_addr, rlen);
                                sendto(sendsock, "123", 3, 0,&dest_addr, rlen);                              //随便测试
                                memset(phone_reply,0,PHONE_REPLY_LEN);
                                count = 0;
                        }       
                }       
        }
}





http://blog.csdn.net/robertkun/article/details/8475843#comments
这个是linux的一个实例,但是他的配置中有个  nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt)); 这个操作
但是在MQX中源码中并没有找到和
SO_BROADCAST相关的配置参数,怎么办。


我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-10-9 09:49:54 | 显示全部楼层
你好,楼主!
我会将你的转告给MQX工程师,他稍后会回复你的!
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-10-9 09:50:13 | 显示全部楼层
还有一点楼主!
以后有关飞思卡尔产品的问题,请在【飞思卡尔FAE线上技术支持 】板块提出。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
34
最后登录
1970-1-1
 楼主| 发表于 2014-10-9 10:43:07 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-10-9 09:50
还有一点楼主!
以后有关飞思卡尔产品的问题,请在【飞思卡尔FAE线上技术支持 】板块提出。 ...

嗯  好的,谢谢关注。
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-10-9 11:35:11 | 显示全部楼层
vc66vcc 发表于 2014-10-9 10:43
嗯  好的,谢谢关注。

不客气,有其他问题,咱们再交流。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
34
最后登录
1970-1-1
 楼主| 发表于 2014-10-9 11:39:54 | 显示全部楼层
问题已确认,这个是解决通信邮件地址
http://community.freescale.com/thread/332161

总的来说
1.mqx 不知为什么会认为192.168.1.255的广播信息的目的地址不合法,会自动的丢弃。
2.mqx可以成功的接收来自255.255.255.255的广播信息。
3.我的网络调试助手在win7的电脑上发出的255.255.255.255的广播信息会被PC屏蔽掉,导致广播信息到达不了mqx。
4.我使用android手机上的网络调试助手成功的发出了255.255.255.255的广播信息,并且被mqx成功的接收了。
谢谢FSL_TICS_ZP的关注。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2019-4-1 22:48
  • 签到天数: 302 天

    连续签到: 1 天

    [LV.8]以坛为家I

    87

    主题

    7322

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    4632
    最后登录
    2021-1-25
    发表于 2014-10-28 00:16:02 | 显示全部楼层
    广播的信息总会去对应一个地址的吧
    1、Client 需要 Bind 端口.
    2、广播分很多种,除了受限广播,还有指向子网的广播等。(INADDR_BROADCAST不是必须)
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-8 03:47 , Processed in 0.097393 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表