2012-12-28 18 views
-4

我想用java來製作聊天信使,它將在局域網上工作。 在客戶端我有:java網絡:如何獲得服務器的IP:

Socket socket=new Socket(serverIP, port); 

如何理解什麼是服務器IP,在其上的ServerSocket正在等待進入的連接

這是一個非常小的網絡計算機的IP地址:1級的服務器和1客戶端,交叉電纜網絡

+0

3反對!對不起,爲什麼? – SAndroid

回答

0

我不想練習網絡編程,它是一個真正的程序,並將成爲商業。但無論如何只有2臺電腦將通過交叉電纜進入網絡。由於該程序將安裝在不同的計算機上,因此我在編程時不知道服務器的IP,因此無法預定義。現在我正在尋找一種方式,我自己的程序可以在本地網絡中找到服務器的IP,並且可以連接到服務器。所以它不能通過參數傳遞給客戶端,因爲它是未知的,程序必須找到...我終於找到了2個偉大的方法來自動找到它的服務器主機名和用戶是不會給節目中,我們發現我們的本地主機名的任何IP或任何信息......

所有1.首先:

InetAddress.getLocalHost().getHostName(); 

然後我們運行這個命令行:

net view 

這個返回名稱當前在網絡中的主機(在我的情況下是LAN網絡),現在就像我們當地的h一樣OST的名字和所有的主機名,我們可以找到其他的主機(這絕對是我的情況下,服務器,因爲只有2網絡中的計算機...)名稱等輕鬆連接到:

Socket socket=new Socket(InetAddress.getByName(SERVER_NAME),port); 

2.客戶端也可以通過multicastsocket獲取服務器的IP。所有的客戶端和服務器都加入到一個預定義的IP組中,並且服務器將它的IP發送給所有的接收者(=客戶端)。

2

客戶必須知道服務器IP - 它必須被預定義。客戶可以找到它沒有什麼神奇的方式。所以,你可以:

  • 硬編碼在客戶端代碼的服務器IP
  • 運行客戶端

如果你的局域網路由器DHCP設置,你的IP時傳遞的服務器IP作爲命令行參數地址會隨着時間的推移而變化,所以第二個變種更好。我想商業聊天客戶端有一個衆所周知的URL/IP硬編碼或類似的,他們從中獲得聊天服務器地址。

this C# example通過在同一臺機器上運行這個問題被繞過,但您可以看到客戶端具有硬編碼的「服務器IP」。

this VB example IP正在由用戶輸入。

編輯:

客戶Socket(因爲你寫的)連接到服務器ServerSocket。 ServerSocket知道客戶端Socket IP地址,因爲客戶端只是從該IP地址連接到它!如果你不明白這一點,請閱讀(自己嘗試)這excellent tutorial

「把它作爲一個參數」:

讓我們假設你有一個名爲‘項目’的文件夾,裏面一個名爲‘mypackage的’和裏面一個名爲HelloWorld.class的文件夾。 HelloWorld.class的是HelloWorld.java,Java源文件看起來像這樣編譯Java類文件:

package mypackage; 

public class HelloWorld { 

public static void main(String[] args) { 
    System.out.println("You entered the following arguments from the command line:"); 
    for (int i = 0; i< args.length; i++) { 
     System.out.println(args[i]); 
    } 
} 

地方自己在項目目錄和寫:

java mypackage.HelloWorld commandlineArgument1 commandlineArgument2 

它將打印:

You entered the following arguments from the command line: 
commandlineArgument1 
commandlineArgument2 

A tutorial爲此。

+0

客戶端和服務器不在同一臺機器上,並且也沒有路由器(交叉電纜網絡)。正如你所說的那樣,服務器的IP並不是恆定的,並且從一個網絡到另一個網絡(可能IP是由Windows自動分配的,也可能是用戶手動定義的...)並且不能被預定義。所以我該怎麼做? – SAndroid

+0

這不是一個新問題,它是如何解決這樣的客戶端服務器聊天信使? – SAndroid

+0

你能否告訴我你的意思是「通過它作爲一個論點」?怎麼樣 ?我認爲你的意思是服務器把IP發送給客戶端,然後還有另外一個問題,客戶端的IP是什麼,以便我們可以發送消息給?!!!!!不過我想我沒有得到你的意思... – SAndroid