2013-01-12 30 views
-2

我正在編寫一個虛擬網絡。
我有一箇中央客戶端類,它實現了我的整個網絡,並允許向/從網絡中的特定其他客戶端發送/接收數據。我現在不想爲使用網絡的所有程序使用Client類的單個實例。我有一個處理傳入數據包的程序的接口,以及一個用於發送的包裝器,所以我會感謝另一個解決方案,而不是「運行本地TCP服務器」。使用單個類的實例的多個Java程序

我現在的問題是: 如何爲所有使用Java的程序運行一個類的單個實例?

+1

問題是什麼? – MrSmith42

+0

聽起來像你應該創建一個通用的Java庫,其中包含Client類,並添加到每個單獨的Java程序的構建路徑中......但是@ MrSmith42是對的,這是沒有問題的。 –

+0

我很抱歉,問題是間接地在句子中「我現在不想爲使用網絡的所有程序使用客戶端類的單個實例」。 – th3falc0n

回答

0

這可以通過使用Java中提供的RMI,RMI-IIOP或CORBA功能輕鬆完成。所提及的技術允許在單個機器(服務器)上創建一個對象實例,並將其作爲遠程接口導出到其他計算機(您說您需要網絡)。在其他主機中,您將擁有一個具有與「真實」實例相同接口的存根類,並且可以調用其上的方法。這些調用將在您的僕人的單個實例上遠程調用。可能會認爲,這正是你所要求的。

從更新,更有趣的方法看,Google協議緩衝區看起來像是一件好事,但您需要使用協議緩衝區更多的自定義代碼。 Web服務還允許導出界面,並且更適合通過防火牆(這裏列出的其他方法更適合於在自己的服務器之間進行通信,您可以配置自己的想法)。

如果您需要確保只有一個程序實例在給定的操作系統上運行,則可以這樣做:discussed in this question。如果你的程序正在監聽固定端口,那麼由於端口已被佔用,二次可能無法正常啓動;所有你需要的是當你試圖綁定socked並終止時捕獲異常。

+0

我想我的英語有點不對勁。我不想在網絡中有單個實例。我不想在本地PC上使用我的網絡客戶端的單個實例。我實際上正在嘗試編寫一個像Tor這樣的網絡。 – th3falc0n

+0

誰阻止你擁有單個實例? – h22

+0

我不知道該怎麼做:/ – th3falc0n