2014-11-22 58 views
0

我已經在java中實現了一個客戶端 - 服務器應用程序。服務器可以爲多個客戶端提供服務,我想測試一下,但是我對網絡的瞭解很差,而且我需要一種方法在我家中測試我的應用程序。兩臺電腦在同一個IP上?

我有一個rooter,它連接了我的兩臺計算機。我在java中的「服務器」類在給定的端口上使用本地主機(127.0.0.1)作爲主機。

我如何測試我的計劃,如果

  1. 的Server.java是關於計算機A上運行
  2. Server.java是在127.0.0.1上運行3943端口
  3. 1 Client.java被在計算機A
  4. 第一Client.java運行被連接到3943端口
  5. 第二Client.java在計算機B
  6. 第二Client.java是上運行連接到3943端口

任何想法?

回答

0

當客戶端和服務器位於同一臺計算機上時,您所做的工作必須已經開始。 要從另一臺計算機連接,您需要找到服務器的「真實」IP地址。

如果您在Windows上,請在計算機A上打開命令shell,然後運行ipconfig。在unix/linux/mac上,運行ifconfig。 尋找一個字符串,看起來像一個IP地址,但而不是 127.0.0.1,如果您連接到網絡,必須有另一個,可能看起來像10.0.0。或192.168。 < 0或1> .. 使用此地址代替127.0.0.1

+0

我發現你正在說的IP地址和程序工作。非常感謝!! – 2014-11-22 16:24:41

2

在同一臺機器上運行的客戶端和服務器使用唯一的端口。另外,127.0.0.1是localhost(該機器的內部)。計算機B無法與計算機A上的127.0.0.1通信。如果所有應用程序在同一臺計算機上,請使用127.0.0.1。如果您希望外部機器能夠與服務器通信,請使用計算機的實際IP地址。

+0

我必須使用託管服務器或另一臺計算機的計算機的外部IP地址? – 2014-11-22 16:21:24

+0

服務器將偵聽外部IP地址上的客戶端。客戶端將連接到服務器的外部IP地址。客戶端IP地址並不重要。它可以是任何IP地址。但是,服務器必須具有客戶端將「連接」到的已知IP地址。 – dsharpe 2014-11-25 01:25:32

0

如果您運行服務器綁定到IP 127.0.0.1您不打開它到網絡,只有您自己的計算機將能夠連接到它,訪問127.0.0.1(環回IP地址)。

要打開該服務器連接到網絡,你必須做的兩兩件事之一:

  • 將其綁定到IP 0.0.0.0所以這將是從所有網絡acessible;
  • 將它綁定到特定的網絡IP地址,以便它只對該網絡可用。

它的常見做法是將其綁定到0.0.0.0,它更容易。

一旦完成,您將能夠從其他計算機連接到在計算機A上運行的服務器,但不通過IP 127.0.0.1。這就是回送地址,只能被計算機用來連接到本身

計算機A可以使用IP 127.0.0.1連接到服務器,因爲服務器正在其上運行,但其他網絡計算機必須指定計算機A的網絡IP地址。

您可以在網絡適配器詳細信息中找到您的IP地址,或在命令提示符(Windows)或ifconfig(Linux)上運行命令ipconfig /all

+0

我必須指出,兩臺電腦都通過該路由器上的無線網絡連接。我運行第一個客戶端到本地主機,因爲服務器運行在同一臺電腦上。我更改了第二臺PC上的第二臺客戶機的主機(服務器不在那裏運行),並且出現以下錯誤: '線程中的異常「主」java.net.ConnectException:連接中斷「 注意:程序在本地主機上成功完成。 – 2014-11-22 16:16:46

0

完整的TCP連接由兩個不同的端點組成。連接的服務器端是一個端點(它將在該端點執行監聽)。當客戶端創建它的連接端(客戶端套接字)時,它將執行連接到服務器ip:port組合並獲取從一系列所謂的「短暫」端口分配的數字。

連接兩端都具有相同IP地址的事實並不重要 - 全連接由兩個不同的元素(地址:端口組合)定義。

FirstClient與服務器的連接將爲ServerIP:ServerPort < - > Client1_IP:Client1_Port,SecondClient的連接將爲ServerIP:ServerPort < - > Client2_IP:Client2_Port。網絡層可以區分它們(它們是兩個不同的連接流)並將流量路由到該流的適當發送者/接收者。

相關問題