• nanomsg 广播 问题


    1.初始化例子

      m_fd = nn_socket (AF_SP, NN_SURVEYOR);
            if (m_fd < 0)
            {
                LOGMgr::error(MSG( QString("nn_socket")+QString(nn_strerror (nn_errno ()) )) );
                m_bInit = false;
                break;
            }

            int  timeout = TIMEOUT; // 设置接收超时时间, 测试不起作用
            //int err = nn_setsockopt(m_fd, NN_SOL_SOCKET, NN_RCVTIMEO, &timeout,sizeof(int));
            nn_setsockopt(m_fd, NN_SURVEYOR, NN_SURVEYOR_DEADLINE,&timeout, sizeof(timeout));

            if (nn_bind (m_fd, "ipc://survey_test") < 0)
            //if (nn_connect (m_fd, "tcp://127.0.0.1:8002") < 0)//测试不可以
            {
                LOGMgr::error(MSG( QString("nn_connect")+QString(nn_strerror (nn_errno ()) )));
                nn_close (m_fd);
                m_bInit = false;
                break;
            }

    2,接收 例子

      bool bSuccess = true;
        if (nn_send (m_fd, m_quitData.data() , m_quitData.length()+1 , 0) < 0)
        {
            LOGMgr::error(MSG( QString("nn_send")+QString(nn_strerror (nn_errno ()) )) );
            nn_close (m_fd);
            return false;
        }

        int count = 0;//接收到了几个 进程 回复的命令
        int success = 0; //成功退出几个
        QList tempList;
        while(1) {
           //char data[128]= {0};
           char *buf = nullptr;
           int bytes = nn_recv (m_fd, &buf, NN_MSG, 0);
           if (bytes < 0 && nn_errno() == ETIMEDOUT)//接收超时 退出接收
           {
               LOGMgr::info(MSG( QString("nn_recv time out") ));
               break;
           }
           if (bytes >= 0)
           {
               ++count;
               QByteArray temp(buf,bytes);
               tempList<            nn_freemsg (buf);
           }
           else
           {
               LOGMgr::error(MSG( QString("nn_recv")+QString(nn_strerror (nn_errno ()) )));
               return false;
           }
        }

    3设置超时时间

    nn_setsockopt(m_fd, NN_SURVEYOR, NN_SURVEYOR_DEADLINE,&timeout, sizeof(timeout));

    4.问题 (进程都在一台机器上)

    广播偶尔会会出现 进程A或进程B或所有的 都收不到数据 。发送还是成功的

  • 相关阅读:
    STM32F1与STM32CubeIDE编程实例-矩阵键盘驱动
    CSS 基础知识-01
    Vue知识点整理(待更新)
    尿素和车用尿素的区别
    鸿蒙系统扫盲(一):鸿蒙OS和开源鸿蒙什么关系?
    亚信科技亮相南京软博会,数智赋能百行千业
    C++之二叉搜索树详解
    高阶数据结构-----三种平衡树的实现以及原理(未完成)
    机器学习 --- 决策树
    [车联网安全自学篇] 八. ATTACK安全之车机(Android)设备中监控命令执行的一些想法【概念篇】
  • 原文地址:https://blog.csdn.net/woquNOKIA/article/details/133860947