2012-07-03 44 views
1

我有一些代码与我的本地IP一起工作,但是当我尝试收听非本地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 /端口(IT公司的Asterisk服务器,我想听听它recive的回应对我的行为,并呼吁),如果没有数据到达,“选择”将保持不变。

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

感谢提前

+0

您是否配置了路由器,以便它允许服务器正在监听的端口上的连接? –

+0

@JimmyGustafsson我直接从连接到同一个交换机的机器上听IP。理论上,Asterisk正在应答端口30000(我配置它)。我可以连接telnet,我有回应,但我不能听。 –

+0

新信息:我做了一个测试whith没有选择和听动作,只需连接,发送,然后recv,它完美的作品。也许......有可能听外部端口?或者你只是可以收到信息?谢谢! @JimmyGustafsson –

回答

0

通常这是不可能的。根据设计,针对IP的数据包只能路由到具有该IP的机器。仅仅因为你已经开始倾听IP,不会让路由器奇迹般地改变主意,并开始将其他人的数据包发送给你的机器。

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

1

你不能“听[转]非本地IP”,“是否来自同一网络”与否。套接字只能绑定到本地地址。你必须忽略一些以前的错误。否则,你的问题已被严重措辞。