无本地IP的套接字侦听器无法正常工作

时间:2012-07-03 07:44:23

标签: c++ sockets listen

我有一些代码可以使用我的本地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非常有效,但是当我尝试从我的新工作中听到其他IP /端口时(它是Asterisk服务器,我想听它来回复我的行动和电话的响应),“如果没有数据到达,请选择“保持不变。

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

感谢您提前

2 个答案:

答案 0 :(得分:1)

无论是“来自同一网络”,您都无法“收听”非本地IP“。套接字只能绑定到本地地址。你必须忽略一些先前的错误。或者你的问题已被严厉措辞。

答案 1 :(得分:0)

一般来说,这是不可能的。根据设计,针对IP的数据包仅路由到具有该IP的计算机。仅仅因为你已经开始聆听IP,就不会让路由器神奇地改变主意并开始将别人的数据包发送到你的机器上。

有时可能会出现这种情况,例如,当您和其他计算机通过哑中心连接时,会将每个人的传输重新传输给每个人,并且您的界面被放入promiscuous mode(即它被配置为不丢弃针对非本地IP的数据包)。如果这是您要实现的目标,则需要确保两台计算机都连接到hub,而不是switch,并查阅操作系统文档,了解如何将网络接口切换为混杂模式。