2015-04-18 87 views
-1

我有一個Node.js服務器,客戶端是一個移動應用程序。我想知道哪個是知道服務器本地IP的最佳方式。我的意思是...從node.js中的客戶端知道本地ip服務器

服務器運行在localhost:8080和客戶端必須連接到服務器像這樣192.168.0.107:8080(PC的本地IP)。

我想訪客這個IP,192.168.0.107而不寫在客戶端代碼,因爲它可以改變。

回答

1

恕我直言,這是不可能的一個真正可靠的方式。這有幾個原因,其中包括:

  • 服務器可能有多個IP,多個網絡適配器。
  • 服務器具有IPv4和IPv6地址。
  • ...

因此,無論你需要縮小你想實現什麼,或者你不得不忍受某種uncertainness。

最簡單的方法就是使用主機名進行DNS查找,以獲取知名的IP地址,然後選擇其中一個(但是您要這樣做,這取決於您)。 PS:我不完全確定我真的有你的問題。如果我正確理解了你的話,你想知道客戶端上的客戶端的IP地址,因爲你需要將它發送給服務器,對吧?

+0

對不起,我想知道客戶端連接服務器的IP地址。我在電腦上有一臺服務器,可以在任何電腦上啓動,所以我需要我的移動應用程序(客戶端)查找連接它的服務器IP。 –

+1

是的,Golo說你不能,因爲基本上:你不知道客戶端將連接到服務器的路線,或者其他網絡可能會遇到的路線。你可以採取猜測(例如eth0上有什麼IP),但在很多情況下這可能會出錯。這幾乎總是留給管理員設置的配置。 – Joe

+0

還有一種方法可以將別名放到服務器IP上,使其可以從客戶端訪問? –

0

如果你正在尋找一個簡單的答案,還有,這是否對你NPM模塊,它真的小,所以只需安裝並使用的指令來獲取客戶端的IP:

https://www.npmjs.com/package/request-ip

入門:

var requestIp = require('request-ip'); 

// inside middleware handler 
var ipMiddleware = function(req, res, next) { 
    var clientIp = requestIp.getClientIp(req); // on localhost > 127.0.0.1 
    next(); 
}; 
+0

感謝您的回答,但我想知道cient中的服務器IP。 –

1

我的猜測是,你有一個動態IP的服務器,你想你的客戶端連接到這個IP沒有硬編碼是到CLI ent的代碼。我會說有很多選擇:

  • 設置DNS,以便您連接到一個已知的主機名,然後將它翻譯成您的DNS服務器的IP。
  • 使用您網絡的廣播地址實施/使用發現服務。 (服務器可以定期向廣播IP廣播信息,然後您的客戶端將收到此信息並使用它向用戶顯示可用服務器的列表)
  • 讓客戶端有一個輸入框,可以在其中輸入IP地址(這是最簡單的方法,只是有一個傢伙輸入的IP地址,也許保存地址爲未來的自動完成等)
0

根據您的實際實施(這不包括在你的問題中)的網絡拓撲細節, ,您至少有三種不同的選擇:

服務器直接與公衆互動

在公共網絡上(例如,g開放的互聯網),DNS是這類問題的正常答案。您遵循以下步驟:

  1. 確保您有一個公共IP地址。您可能會也可能不知道192.168.0.107不是公共IP地址。這是一個當地的互聯網地址,不能在開放的公共互聯網上路由。

  2. 使用DNS服務,創建一個DNS記錄,建立主機名稱(如「google.com」)和公共IP地址之間的鏈接。

  3. 代碼客戶端連接到您的「名稱」,而不是您的IP地址。


服務器和移動應用只能在專用網絡

如果您的移動應用只能運行你的專用網絡(或許通過無線網絡)上,那麼你可以在配置自己的DNS服務器的這個私人網絡的功能與上述步驟基本相同,但可用於專用網絡上的私人地址,如192.168.0.107


服務器住的家庭網絡上,想通過網絡

訪問,如果您的服務器住你的專用網絡中(因此只具有私有IP地址),但你要能夠從公共網絡到達它,那麼你需要在你的專用網絡和你的公共網絡之間的邊界處配置某種路由或端口轉發。在家庭路由器情況下,這將涉及以下步驟:

  1. 獲取您的家庭網絡連接的公共IP地址。
  2. 在開放的互聯網上爲該IP地址設置公共DNS項。
  3. 如果您的公共IP地址不是靜態IP地址(例如,它可能隨時間而改變),那麼您可以使用爲此類情況構建的「動態DNS」服務之一。
  4. 在您的家庭路由器上,配置端口轉發,以便在網絡服務器上運行的端口(通常爲端口80)上從互聯網接收到的請求或轉發到您家庭網絡上實際的node.js服務器的私有IP地址。
+0

在我的情況下,正確的答案是secon情況。有什麼方法可以直接在node.js中創建DNS服務器? –

+0

@MiguelAngel - 無論您爲node.js服務器運行的操作系統是否具有DNS功能,只需要配置並運行即可。或者,您的本地路由器(假設您有通往互聯網的網關)可能具有DNS功能。如果這是連接到互聯網的網絡,那麼您的路由器可能是客戶端的默認DNS服務器,或者路由器可以配置爲指向特定的本地DNS服務器。這取決於您的本地配置,並且在給定配置的Google搜索中可以找到大量信息。 – jfriend00

相關問題