1

我有一些适用于我的本地 IP 的代码,但是当我尝试侦听非本地 IP(来自同一网络)时,此代码不起作用。显然,我的“选择”子句不再起作用了。

    while(IsReading() && IsConnected())
    {
            FD_ZERO(&lReader);
            FD_SET(GetConnection(), &lReader);

            int lHasData = select(GetConnection()+1, &lReader, NULL, NULL, NULL);

            if (lHasData > 0)
            {
                    //Accept and read socket...
            }
    }

正如我所说,这对我自己的 Ip 非常有效,但是当我尝试从我的新网络(它是 Asterisk 服务器,我想听它来接收我的操作和调用的响应)中监听其他 IP/端口时,“选择”是如果没有数据到达,则保持不变。

我的非本地 IP 代码有问题吗?

感谢提前

4

2 回答 2

1

无论是否“来自同一网络”,您都无法“收听 [to] 非本地 IP”。套接字只能绑定到本地地址。您一定忽略了一些先前的错误。否则,您的问题措辞不当。

于 2012-07-03T10:03:51.957 回答
0

一般是不可能的。按照设计,以 IP 为目标的数据包仅路由到具有该 IP 的机器。仅仅因为您已经开始侦听该 IP 不会使路由器神奇地改变主意并开始将其他人的数据包发送到您的机器。

有时有可能,例如,当您和另一台机器通过哑集线器连接时,该集线器将每个人的传输重新翻译给每个人,并且您的接口进入混杂模式(即,它被配置为不丢弃针对非本地的数据包IP)。如果这是您要实现的目标,则需要确保两台机器都连接到集线器,而不是交换机,并查阅您的操作系统文档以了解如何将网络接口切换到混杂模式。

于 2012-07-03T10:15:54.817 回答