非本地 IP 的套接字侦听器不起作用

Socket listener to no-local IP is not working

本文关键字:套接字 侦听器 不起作用 IP      更新时间:2023-10-16

我有一些代码可以使用我的本地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 非常有效,但是当我尝试从我的 newtwork 中监听其他 IP/端口时(它是 Asterisk 服务器,我想听它以接收我的操作和调用的响应),"选择"就像没有数据到达一样。

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

感谢您的提前

您不能"侦听非本地IP",无论是否"来自同一网络"。套接字只能绑定到本地地址。您一定忽略了以前的一些错误。否则你的问题措辞不好。

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

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