接收UDP广播

Bli*_*ndy 10 c++ udp

我必须接收UDP广播(如果有任何不同,在Ubuntu中).使用Wireshark,我可以看到从服务器机器发送的数据包,我可以看到它被我的客户端机器接收,但我的程序完全没有注意到.这就是我所拥有的:

sockaddr_in si_me, si_other;
int s;
assert((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))!=-1);
int port=6000;
int broadcast=1;

setsockopt(s, SOL_SOCKET, SO_BROADCAST,
            &broadcast, sizeof broadcast);

memset(&si_me, 0, sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(port);
si_me.sin_addr.s_addr = INADDR_ANY;

assert(::bind(s, (sockaddr *)&si_me, sizeof(sockaddr))!=-1);

while(1)
{
    char buf[10000];
    unsigned slen=sizeof(sockaddr);
    recvfrom(s, buf, sizeof(buf)-1, 0, (sockaddr *)&si_other, &slen);

    printf("recv: %s\n", buf);
}
Run Code Online (Sandbox Code Playgroud)

它是在调试模式下编译的,在编译期间断言没有被擦除,而我的程序只是阻塞recvfrom.

有没有其他的箍我必须跳过接收无目标的UDP广播?

编辑:更多信息,我在专用交换机上连接了两台计算机,没有外部干扰.我的客户端计算机上还有第二块网卡连接到公司网络,该网络也可以使用.

我可以ping外部(Internet工作)和我的服务器机器(加上我可以看到Wireshark中的实际数据包),但你永远不知道什么可能导致这个问题.

Bli*_*ndy 4

事实证明我的代码非常好,正如我所想的那样。网络设置本身有问题。

为了后代,我在自己的集线器上设置了两台静态 IP 计算机,而不是使用服务器计算机上内置的 DHCP 服务器为另一台计算机分配 IP 地址。我的问题非常本地化,但你永远不知道..