rmi、防火牆與網閘

zgy13121發表於2008-07-21
rmi、防火牆與網閘[@more@]

要點:

1 rmi服務原理。 首先由rmi伺服器註冊,建立serversocket. 其次由rmi客戶機lookup,返回物件stub. 最後由rmi客戶機呼叫物件方法。由於只是得到服務的stub,實際執行是由伺服器完成的,但看似在客戶端完成。

2 如果有防火牆,則必須固定rmi引擎埠與服務埠。

引擎埠是用來客戶機查詢的,服務埠是真正用來與客戶機通訊的。

只有固定了埠,防火牆與網閘才能有針對性的開放埠。

在此要注意,建立固定埠sorcket與設定SocketFactory必須在繫結查詢埠前完成。

如果不固定埠,有可能報異常如: Connection refused to host: 。。。; nested exception is: java.net.ConnectException: Connection timed out: connect 開放埠原碼: SMRMISocket smRMI = new SMRMISocket(intePort); smRMI.createServerSocket(intePort+ 1); RMISocketFactory.setSocketFactory(smRMI);

// 3: 繫結

if (System.getSecurityManager() == null)

{

System.setSecurityManager(new RMISecurityManager());

}

LocateRegistry.createRegistry(Integer.parseInt(port));

String rmiAddress = "//"+ip+":"+port+"/Engine";

Naming.rebind(rmiAddress, new ExampleRMIImpl(null));

//如果例項化ExampleRMIImpl必須放在setSocketFactory方法後面。

//System.out.println("rmi rebind address is:"+rmiAddress);

3 服務端與客戶端jar必須完全一致。否則造成客戶端訪問時,客戶端須先從服務端下載,報安全許可異常。類似:

error unmarshalling return; nested exception is: java.lang.ClassNotFoundException: className_Stub (no security manager: RMI class loader disabled)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11419868/viewspace-1007563/,如需轉載,請註明出處,否則將追究法律責任。

相關文章