我疯了,有什么清晰的文档可以在主机和客户端之间运行java吗?我发现在不同的论坛上,各种拼图块,但从来没有,一个从一个到z指南,其中的scurity准则必须遵循等,使一个RMI工作。如果我在本地运行服务器和客户端,它就能工作。
现在,我的低级问题是,即使我在任何地方设置外部服务器地址(?),它在错误消息中都说"localhost“拒绝连接.你有什么想法吗?
客户端:
try {
System.setProperty("java.rmi.server.hostname","42.155.241.914");
String name = "RemoteBookService";
String serverIP = "42.155.241.914"; // or localhost if client and server on same machine.
int serverPort = 1099;
Registry registry = LocateRegistry.getRegistry(serverIP, serverPort);
IRemoteService rs = (IRemoteService) registry.lookup(name);错误:
java.rmi.ConnectException:连接拒绝宿主: localhost;嵌套的异常是: java.net.ConnectException: Connection : connect
服务器:
public static void main(String[] args) throws MalformedURLException, AlreadyBoundException {
try {
System.setProperty("java.rmi.server.hostname","42.155.241.914");
LocateRegistry.createRegistry(1099);
String name="//42.155.241.914/RemoteBookService";
RemoteService rs = new RemoteService();
Naming.bind(name, rs);
System.out.println("Service started");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("could not start registry");
}
}发布于 2022-08-31 09:48:06
乍一看,您的服务器似乎使用了LocateRegistry.createRegistry(port);,它意味着您没有存储到局部变量的注册中心(相同的进程),然后调用Naming.rebind(bind, rs),这意味着在默认端口上使用本地注册表(相同的主机,其他进程)。
尝试将服务器上的行更改为:
Registry registry = LocateRegistry.createRegistry(port);
...
// NOTE registry.rebind not called with name="//42.155.241.914/RemoteBookService"
registry.rebind("RemoteBookService", stub); 希望这能让你进入下一步,但是有很多方法可能会出错,所以你可能需要用更多的细节来编辑这个问题。
https://stackoverflow.com/questions/73548807
复制相似问题