簡體   English   中英

如何在Java中實例化Socket類?

[英]How to instantiate a Socket class in Java?

我知道可以以這種方式實例化Socket類(例如):

new Socket("taranis", 7);

其中“ taranis”是本地網絡中服務器的名稱。 在這方面,我有兩個問題:


1.如果我的計算機不是局域網,而是連接到Internet,我可以使用計算機的IP地址來實例化套接字嗎?


2.我的計算機如何在本地網絡中獲取名稱? 創建網絡時,是否給計算機命名?

PS我認為計算機可以自己建立網絡(使用zeroconf)。 誰給計算機命名,以及我如何事先知道這些名稱(我需要它們來編寫代碼)。

在進行套接字編程之前,您需要一些網絡背景知識。 不幸的是,您提出的問題並不簡單,因為這取決於您擁有的特定網絡配置。 這是一些簡短的答案,但由於對特定配置的依賴性,可能會不正確。 你會做的更好,以TCP / IP上讀到例如這里

  1. 是。 但是我懷疑您的計算機沒有形成局域網(LAN)。 如果出現這種情況,您可以使用其LAN IP地址。 要找到ipaddress,可以在Windows的“命令提示符”上使用“ ipconfig”命令,在Unix上使用“ ifconfig”。 輸出是計算機中每個網絡接口的配置。

  2. 是的,您可以在計算機上配置每台計算機的名稱。

對於編程,通常將使用ipaddress(當名稱可以動態分配給其中一台計算機(使用動態DNS)時,請使用name)。 IP地址也可以(通常是)使用DHCP服務器動態分配。

  1. 是的,您可以使用IP地址創建一個套接字,您可以像這樣: new Socket("192.168.1.00",8888)

  2. 在計算機上安裝操作系統時,通常,操作系統使您經歷的步驟之一就是為計算機命名。 每個操作系統還具有在安裝后更改這些名稱的方法。 因此,您的每個計算機都可能有一個名稱。 但是,棘手的部分是使一台機器知道另一台機器的名稱。 這可以通過幾種方式來完成。 一種是使用DNS服務器 這就像一個中間人,它將名稱(即Computer1)轉換為其IP地址(192.1.168.1.100)。 您也可以將這些映射保留在本地,也可以將其放在hosts文件中。 這是名稱和ip地址之間的映射,如果使用此方法,則需要確保這些主機文件在計算機之間對齊。

  3. Zeroconf是一個有趣的協議。 它的工作方式是:一台計算機創建命名服務,第二台計算機僅按名稱查找服務,一旦找到服務,便可以連接到該服務。 發現服務后,連接的客戶端可以查詢要連接的IP和端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM