【发布时间】: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