2012-08-09 47 views
1

我花了一些時間瞭解Java中的套接字編程,並設法制作了幾個利用套接字的簡單應用程序。 (即時通訊,井字遊戲,基本的東西)對於我的程序,我使用了與ServerSocket和Socket類的客戶端 - 服務器關係。到目前爲止,我一直在同一臺機器上測試我的所有遊戲,這意味着客戶端和服務器都運行在同一臺機器上,並且我使用的套接字ip是127.0.0.1。現在我想用同樣的邏輯製作局域網遊戲。一臺電腦將成爲服務器,另一臺將成爲客戶端。Java中的局域網遊戲

我想問的東西,並請原諒,如果這是一個愚蠢的問題,我沒有真正教育網絡和什麼,但在什麼條件下我可以建立兩臺機器之間的套接字連接。我的意思是,我在一臺計算機上運行套接字服務器,並且希望另一臺計算機上的套接字使用第一臺計算機的ip進行連接。說,例如我的IP是「192.1.1.4」我想能夠連接到該計算機。是否有可能在世界上任何兩臺計算機之間建立這樣的連接?我知道「lan」代表「局域網」,但我對此不甚瞭解。對不起,這是一個愚蠢的問題,我可以澄清,如果有人需要我。

基本上,在兩臺機器上必須滿足哪些條件才能使用Java程序在它們之間建立套接字連接?

+0

謝謝大家的快速回復。欣賞它。 – user1588452 2012-08-09 19:25:42

回答

5

可以使之間的TCP/IP連接:在同一個局域網

  • 兩臺機器(私有IP)
  • 兩臺機器的公網IP(互聯網)
  • 一臺機器在一個局域網和與公網IP的機器提供的連接從LAN openned公衆IP

無法打開直接的TCP /從局域網外的局域網內IP連接到一臺機器,除非水道eway被配置爲將連接重定向到該機器的特定端口。

+0

因此,如果我有兩臺帶有私有IP的機器:'machine1:192.168.1.5'和'machine2:192.168.1.6',我需要打開任何端口,還是隻需將IP輸入到套接字並連接? – 2017-08-05 15:46:24

+0

Hi @Cardinal系統,您不需要在路由器/網關中打開端口。你需要在一臺機器上監聽,然後你可以在另一臺機器上輸入ip/port來打開一個socket。只要確保你沒有軟件防火牆干擾。 – pmoleri 2017-08-06 02:42:13

1

在內部網絡上,您可以按照您所說的做,客戶端使用服務器的ip地址或給定端口上的主機名連接到服務器。

因爲防火牆和NAT,互聯網可能會非常棘手。例如,家庭網絡上的計算機IP地址可能位於「192.168.0.xxx」的某個位置,但如果轉到:http://www.whatismyipaddress.com,則會看到面向互聯網的IP地址完全不同。您將看到的基本上是您的路由器在互聯網上的IP地址(WAN)。

所以基本上,服務器將不得不在他們的路由器上設置端口轉發,以便將您遊戲的端口連接到他的計算機上。然後,他將不得不爲客戶提供面向互聯網的IP地址進行連接。

0

建立連接的主要標準 - 忽略大量可能的因素(如防火牆配置等) - 是兩臺機器僅在同一個網絡上。您可能知道一個以192.168開頭的IP地址。 總是指本地網絡上的計算機,這是您所問的情況,所以如果您有兩臺計算機連接到本地網絡(例如通過路由器),並且您知道每臺計算機的IP地址,則它真的就這麼簡單 - 你以迄今爲止一直使用的方式進行連接。事實上,在互聯網上也是如此 - 即使您在世界的不同地區建立了兩臺機器,並知道其IP地址(同樣忽略了潛在的更重要的防火牆問題),但此過程完全相同。這正是因特網已被證明具有如此可擴展性的原因,因爲定位具有特定IP地址的機器的過程由網絡堆棧的較低層處理。

tl; dr:它與您現在正在做的一樣,只是使用適當的IP地址。

0

您可以使用公共IP地址,而且您不必更改自己的地址,這是由連接到互聯網的路由器處理的。你必須考慮的是你的防火牆設置。您在套接字中使用的端口應添加到「允許」列表中。通常「建立」的流量默認是允許的。這意味着您需要允許傳入的ports @ serverside轉到您的服務器。