[英]Java - communication through sockets
比方說,在一個程序中,有能力連接到插座和服務器(這是我自己的電腦 - 本地主機),並擁有所有的通信服務器和背面(接收和發送消息像聊天服務)的處理。 如果我這個節目作為一個.jar文件發送給其他兩個用戶各自的機器,用戶執行程序,它會連接到這個插槽和服務器。 如果一切都設置正確(正確地寫入,並從插座InputStream和outputstreams讀取),並顯示在GUI聊天框中的消息,將在兩個用戶能夠使用此聊天服務溝通?
是的,但是阻止用戶執行此操作的主要障礙是網絡地址轉換 (NAT)。
簡而言之,連接到Internet的絕大多數計算機都沒有自己的唯一公共IPv4地址(而且絕大多數也沒有IPv6地址,因為ISP拖延了推出IPv6的步伐,但這是另一回事完全)。
專用服務器通常確實具有(通常是多個)唯一的IPv4地址,但是通常只有運行自己的自治系統的托管公司才能使用大量的IP地址-即使那樣,如今購買IP的價格也非常昂貴,因為它們一個有價值的和稀缺的商品。
無論如何,在某種家庭Internet連接(例如電纜,DSL或光纖)上的兩個隨機用戶幾乎可以肯定具有執行NAT的某種路由器或調制解調器 ,從而為每個用戶設備(計算機,平板電腦等)提供了自己的專用設備。 LAN IP,而不是為每個設備提供唯一的公用IP。
這意味着默認情況下,NAT網關會忽略來自公共Internet的入站連接。 因此,如果您嘗試打開朋友公共IP的套接字,除非已正確配置該網關(調制解調器/路由器),否則它將無提示地忽略您的連接嘗試,並且您將收到超時或“連接被拒絕”類型的消息。
有幾種技術可以解決此問題,但是其中大多數要么需要更復雜的應用程序網絡代碼,要么需要用戶在路由器配置頁面中打亂(休閑用戶通常不願意這樣做)。
你需要采用這些技術,如果您的客戶端使用NAT之一。 如果您的一個客戶端具有直接連接到其計算機的靜態IP並可以直接接受傳入連接(不使用NAT),則只要NAT背后的用戶使用靜態IP 發起 到該客戶端的連接,您的程序概念就無需修改即可工作IP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.