2016-08-21 38 views
2

因此,目前我通過IP地址連接到服務器端,但我希望它不需要指定服務器計算機的IP地址。無論如何,我可以檢測到一個當前的服務器端口在網絡上打開並連接到來自客戶端的那個端口上?套接字服務器和套接字客戶端java - 從位於不同計算機上的客戶端檢測服務器

這是我寫的服務器:

server = new ServerSocket(1234,100); 

,並在客戶端:

connection = new Socket(InetAddress.getByName("someIpAddress"),1234); 

回答

2

如果服務器總是在同一個網絡上,你總是可以使用UDP廣播來檢測服務。

服務器偵聽廣播,然後回覆,從而發送其IP地址。

如果服務器和客戶端位於不同的網絡上,並且至少有一個路由器位於其中,那麼無法從客戶端「檢測」服務器。

+0

OP特別關注java(請檢查該標籤)。我不認爲這種方法會直接幫助他,因爲他不得不使用第三方工具來實現您添加的答案。 –

+0

@Am_I_Helpful我對Java並不熟悉,但是你告訴我沒有辦法在Java中創建UDP套接字嗎?或者設置'SO_BROADCAST'套接字標誌? –

+0

我更關心你答案的最後一段(原因是路由器和網關通常不轉發廣播消息)。我不是說這是不可能的;但是,與C不同的是,可能需要使用外部庫來實現最後一節。 –

1

我希望它不需要指定服務器的IP地址 計算機。無論如何,我只能檢測到一個當前的服務器在網絡上打開 並連接到來自客戶端的那個?

兩個方面討論如下:

  1. 如果你不知道給定的網絡中的服務器,然後檢測到服務器套接字已知端口上運行是一件很麻煩的任務。 Java SE不具備的實力確定哪個系統(在網絡中)具有偵聽X端口的服務器套接字。你需要第三方工具來實現相同的目標。你可以有一個基於點擊和試用的方法來確定。另一點,如果你知道服務器的主機名(例如代碼中的「someIpAddress.com」),那麼在這種情況下,它就歸結爲一個主機名解析器,它可以從IP地址傳遞的主機名。

    您可以在客戶端的/ etc/hosts文件中有關於服務器主機名和IP的映射。或者,您也可以讓DNS服務器將您的請求重定向到IP,並讓您連接到偵聽X端口的服務器。