2011-09-26 131 views
0

編輯:爲了更清楚起見,我基本上需要區分不同的客戶端在存儲在服務器遠程對象註冊表中的對象中執行遠程方法調用。我怎麼能這樣做?Java rmi,區分多個客戶端

而這裏的情況是:

我目前在使用Java創建RMI的客戶端和服務器之間交換數據(存儲在字符串)的客戶端/服務器的命令行界面應用程序的過程。

我有問題而我必須允許一個客戶端發送與用戶名/密碼的認證命令。此認證命令(例如:> user myUserName myPassword)必須通過用於發送服務器必須回答的所有其他命令的相同遠程調用方法發送。

我的問題:客戶必須嚴格,只送他的命令,並顯示他的命令的文本結果從服務器接收。作爲一個簡單的客戶,它沒有任何狀態。

由於某些方法需要客戶端登錄或者如果客戶端已登錄或不在服務器端實現,我需要跟蹤服務器上的客戶端登錄狀態(不是問題,我打算簡單地爲用戶數據庫中的每個用戶保留一個時間戳並使用超時),並且還必須區分不同的客戶端。

現在,我覺得我有多麼的遠程對象的作品是一個好主意,我已經能夠註冊在服務器端的遠程對象和使用客戶端從它訪問遠程方法。因此,我需要做更多的事情,我不僅要讓客戶端能夠訪問遠程方法,還需要遠程方法(以及運行它們的服務器)來知道哪個網絡客戶端正在調用此方法(而不是通過客戶端用戶名/密碼作爲遠程方法中的參數)。

我認爲的RMIClientSocketFactory和RMIServerSocketFactory必須customly用來做這個,但我不知道如何着手。

謝謝你們所有的時間。

回答

1

對象不存儲在註冊表中。存根存儲在註冊表中。遠程對象位於服務器主機中。

java.rmi.server.RemoteServer.getClientHost()

套接字工廠沒有任何關係。

+0

感謝您EJP,從REMOTESERVER的方法getClientHost()方法長相酷似我需要什麼,我就知道線程爲不同的客戶端是在Java RMI本身完成,但是我不知何故,在做研究沒有發現與該特定方法什麼,我可以向你保證,我看了很多。我會盡力與此工作,thx爲你的幫助。 – Bjergsen

+0

@tehjord以及它確切地不在最明顯的地方;-) – EJP