2010-09-21 104 views
4

在我大學期間,我有一個使用TCP套接字在Java中進行簡單聊天程序的個人項目。該項目僅用於教育目的。Java:如何讓客戶端檢測網絡上的服務器?

我不太滿意的一件事是客戶端必須知道服務器的IP才能連接到它。所以我不得不認爲,如果客戶端能夠檢測到網絡上是否有任何聊天服務器可用,那將會很不錯。

我該如何實現這樣的機制?如果你能指引我正確的方向,我會很感激。 :-)我想服務器將不得不做某種廣播,但我不知道如何做到這一點。 PS:我知道這樣做可能還有其他更好的方法,但現在我特別關心如何讓客戶端檢測網絡上的服務器。

而服務器是指聊天應用程序的服務器端部分,不像Tomcat服務器。

回答

3

有很多方法可以做到這一點,但我建議你看看JGroups。聊天應用程序可能有點矯枉過正,但它使用多播提供了有趣的可能性,如無服務器體系結構。

+0

謝謝! JGroups似乎很有趣。我絕對認爲我可以使用它,甚至有一個關於創建聊天程序的教程:P – Stian 2010-09-21 23:32:06

2

查看ZeroConf,它提供了通告和發現服務的機制。 Apple以Bonjour這個名字廣泛使用它。

jmdns項目是一個Java實現,它工作得很好。 http://jmdns.sourceforge.net/

+0

謝謝,但我不認爲這符合我的需要。似乎你必須在服務器上配置一些DNS記錄?就像我說的,通過服務器,我的意思是我的程序就像一臺服務器。我想在沒有任何配置的任何機器上運行該程序作爲服務器(可以隨程序一起分發的配置也是可以接受的)。我沒有時間真正閱讀JmDNS,所以我可能是錯的。 – Stian 2010-09-21 23:37:15

+0

不需要。它可以在沒有任何外部服務器或配置的情況下使用,我相信它完美地滿足您的需求。 (名稱中的DNS是指ZeroConf技術是基於組播DNS的_based_,但它不需要DNS服務器)。 – 2010-09-22 05:37:22

+0

好的。但它似乎沒有任何文檔,所以我會去JGroups。 – Stian 2010-09-22 13:16:53

2

如果在網絡中啓用了多播,則可以嘗試使用多播。

相關問題