我正在尝试重新编码一些基本的设计模式。只有代码片段可供我使用,没有完整的运行代码示例。一种称为代理模式。
我只想通过远程调用方法。这是我的简单代码:
网络服务.java
public class WebService extends UnicastRemoteObject implements IRemote {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
try {
IRemote service = new WebService();
Naming.rebind("RemoteCalculator", service);
} catch (Exception e) {
e.printStackTrace();
}
}
/** No arg default constructor */
public WebService() throws RemoteException { }
/** Methods of remote interface */
@Override
public double getRoot(double v) throws RemoteException {
return Math.sqrt(v);
}
}
... 其中 IRemote 是一个简单的接口,它扩展了远程接口并定义了单个示例方法 (getRoot(double)) 的签名。
现在连接到远程的类:
测试代理.java
public class TestProxy implements Remote{
/**
* @param args
*/
public static void main(String[] args) {
new TestProxy().go(args[0]);
}
public TestProxy() {}
public void go(String ip) {
try {
System.out.println("Trying to lookup for service ...");
IRemote service = (IRemote) Naming.lookup("//" + ip + "/RemoteCalculator");
System.out.println("done");
double d = service.getRoot(5.0);
System.out.println(d);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我正在运行 rmiregistry.exe 并通过 rmic.exe 创建了我的 WebService_Stub.class,如一些文档中所示。本地与 127.0.0.1 连接,因为(ip-)参数工作正常。但是,即使端口 (1099) 已打开并通过 telnet 进行检查,也无法通过 Internet 进行连接。
当我从命令行开始时:
java net.mypackage.remote.TestProxy 78.2.2.2
它总是给出结果:
试图查找服务...完成 java.rmi.ConnectException: Connection refused to host: 192.168.1.51; 嵌套的异常是: java.net.ConnectException: Connection timed out at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) at sun.rmi .transport.tcp.TCPChannel.newConnection(Unknown Source) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unkn own Source) at java.rmi.server.RemoteObjectInvocationHandler。在 net.gerdsmeier.remote.TestProxy.go(TestProxy.java:39) 在 net.gerdsmeier.remote.TestProxy.main(TestProxy.java:22) 在 $Proxy1.getRoot(Unknown Source) 调用(Unknown Source) : java.net。
其中 192.168.1.51 是我的本地 IP 地址(即端口转发工作正常)。