宋吅吅 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, "错误信息");
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记