2012-07-03 75 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」,「是否來自同一網絡」與否。套接字只能綁定到本地地址。你必須忽略一些以前的錯誤。否則,你的問題已被嚴重措辭。