【问题标题】:Windows C++ Multicast sendWindows C++ 多播发送
【发布时间】:2018-02-09 16:25:02
【问题描述】:

我正在努力使用 Windows 发送多播数据包。

下面是我的代码:

SOCKET sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sd < 0) {
        perror("opening datagram socket");
        exit(1);
    }
    sockaddr_in service;
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = inet_addr("225.1.1.1");
    service.sin_port = htons(56565);

    struct in_addr localInterface;
    localInterface.s_addr = inet_addr("10.0.0.58");
    if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface)) < 0) {
        perror("setting local interface");
        exit(1);
    }
    std::string data = "AA";
    if (sendto(sd, data.c_str(), data.length(), 0, (const sockaddr*)&service, sizeof(service)) < 0)
        exit(0);

代码总是在 setsockopt if 上退出。 10.0.0.58 是我的 Wi-Fi 卡地址。我做错了什么?

【问题讨论】:

  • perror() 打印出什么?
  • 它打印“无错误”。如果我忽略出口,sendto if 也会打印“No Error”,但我无法在 Wireshark 上捕获数据包,
  • 嗯,我想知道调用 WSAGetLastError() 是否会为您提供错误代码,该代码可能会为您提供有关问题所在的更多信息。
  • 你以前有过多重投射吗?
  • @MohammadKanan 是的,但在 C++ 上不行(C# 工作正常)。

标签: c++ sockets winsock multicast


【解决方案1】:

但我无法在 Wireshark 上捕获数据包

如果您从未验证过您的 WiFi 网络可以处理 IP mcast,类似的问题,WiFi 路由器配置为禁用 multicast IGMP 数据包!所以你首先检查你的 WiFi 路由器设置 IGMP 部分!

【讨论】:

  • 感谢您的回答,我不知道。尽管如此,这不是问题,因为它在 C# 中运行良好。上面的代码仍然不起作用,但我使用 WinSock2 API 解决了这个问题。
  • @RicardoAlves 认真的吗? Winsock2 工作?我去试试,谢谢!!
猜你喜欢
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多