宋吅吅 2014-11-22 07:18 采纳率: 0%
浏览 9511

UDP绑定本地端口和IP,用sendto向指定端口发广播数据失败

MFC下,上位机采用UDP协议,绑定本地端口60000,向目标端口50000发送广播数据,然后单片机应答。但是上位机调用sendto函数发送失败!

  • 写回答

3条回答 默认 最新

  • 宋吅吅 2014-11-22 07:19
    关注

    代码如下:
    int ret = -1;
    CString str;
    char buf[10] = {0,1,2,3,4,5,6,7,8,9};

    /* 加载套接字库 */
    if (!AfxSocketInit())
        MessageBox("加载套接字库失败!", "错误信息");
    
    /* 创建套接字 */
    int sockfd = -1;
    sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sockfd < 0)
        MessageBox("创建套接字失败!", "错误信息");
    else
    {
        str.Format("创建套接字成功 %d", sockfd);
        MessageBox(str, "提示信息");
    }
    
    /* 本地端口和地址 */
    SOCKADDR_IN src_addr;
    memset(&src_addr, 0, sizeof(src_addr));
    src_addr.sin_family = AF_INET;
    src_addr.sin_port = htons(60000);
    src_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    

    // inet_pton(AF_INET, "192.168.1.102", &src_addr.sin_addr.s_addr);
    memset(src_addr.sin_zero, 0, sizeof(src_addr.sin_zero));

    /* 目标端口和地址 */
    SOCKADDR_IN dst_addr;
    dst_addr.sin_family = AF_INET;
    dst_addr.sin_port = htons(50000);
    dst_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
    memset(dst_addr.sin_zero, 0, sizeof(dst_addr.sin_zero));
    
    /* 绑定 */
    ret = bind(sockfd, (SOCKADDR *)&src_addr, sizeof(SOCKADDR));
    if (ret < 0)
    {
        str.Format("绑定失败 %d", ret);
        MessageBox(str, "错误信息");
    }
    else
    {
        str.Format("绑定成功 %d", ret);
        MessageBox(str, "提示信息");
    }
    
    /* 发送数据 */
    ret = sendto(sockfd, buf, sizeof(buf), 0, (SOCKADDR*)&dst_addr, sizeof(dst_addr));
    if (ret < 0)
    {
        str.Format("发送失败 %d", ret);
        MessageBox(str, "错误信息");
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?