c++ - 在特定情况下不发送 UDP 广播

标签 c++ c linux sockets broadcast

我遇到了这个奇怪的事情:

这是我为广播设置 UDP 套接字的方式:

int broadcast_enable = 1;
int my_socket;

if ((my_socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {

    fprintf(stderr, "ERROR socket\n");
    return 0;
}

memset(&my_addr, '\0', sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
my_addr.sin_port = htons(20007);

setsockopt(my_socket, SOL_SOCKET, SO_BROADCAST, &broadcast_enable, sizeof(broadcast_enable));

这是我通过这个套接字发送消息的方式:

int len = sizeof(my_addr);
char buff;

buff = 'b';

if (sendto(my_socket, &buff, sizeof(buff), 0, (struct sockaddr*)&my_addr, len) < 0) {

    fprintf(stderr, "ERROR sendto\n");
    return 0;
}

我把WireShark放在发送电脑上,监听wifi接口(interface)
1. 当我连接到网络“A”时,我可以看到发件人发送的消息。
2. 当我连接到网络“B”时,我无法看到发件人发送的消息。

  • 正在网络“B”中发送和接收其他广播消息(由其他应用程序)。
  • 发件人在网络“B”中拥有静态 IP。我将其更改为非静态的,并且看到了正在发送的消息。过了一会儿,我再次尝试,它没有发送消息。我无法指出发生的变化。

它是否给任何人敲响了警钟?
如果您需要任何进一步的信息,请告知。

最佳答案

您可能错误地使用 Wireshark,例如,查看错误的 i/f 或错误地过滤结果。 确保你正确使用它,或者更好的是,尝试 tcpdump 以确保你的数据包确实没有被发送:

sudo tcpdump -i any -n udp

关于c++ - 在特定情况下不发送 UDP 广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381742/

相关文章:

c++ - 第一次在 C++ 中使用类,发生了什么?

c++ - SDL 事件队列

c++ - 在一组坐标中找到一个正方形

c++ - 具有可变参数的嵌套宏在 GCC 中编译但在 MSVC 中不编译

c - C 中的临时文件

c++ - 随机唯一整数的非标准排序算法

c - 堆栈内存中的 free()

linux - 如何在 Bash 中使用 awk 命令比较负值?

尽管 Linux 上有 __init.py__ 和正确的 PYTHONPATH,但仍出现 Python ModuleNotFoundError

linux - 使用 automake 设置每个文件的标志