У меня есть две машины:
Сервер: AWS - EC2 - Ubuntu 18.04 Lts
Клиент: Windows 10
Если я попытаюсь запустить свой код только на машине AWS, этоработает нормально, но если я попробую то же самое на другой машине, у меня есть ConnectionRefused по времени на клиентской машине
Код:
AloMundoServidor.java
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.io.*;
public class AloMundoServidor implements AloMundo {
private static int count, fila = 0;
private static boolean lock;
public AloMundoServidor() {}
public String digaAloMundo() throws Exception {
System.out.println("Chamada de aplicacao Cliente recebida! " + count);
/*fila++;
if(lock){
try {
wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
//Log.error("Thread interrupted", e);
}
}
lock = true;
*/
File file = new File("test.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String text = "", line;
while ((line = reader.readLine()) != null) {
text = text + "\n" + line;
}
count++;
Thread.sleep(5000);
// fila--;
// notify();
// if(fila==0) {
// lock = false;
// }
return text;
}
public static void main(String args[]) {
count = 0;
lock = false;
try {
AloMundoServidor obj = new AloMundoServidor();
AloMundo stub = (AloMundo) UnicastRemoteObject.exportObject(obj, 0);
Registry registry = LocateRegistry.getRegistry();
registry.bind("AloMundo", stub);
System.out.println("Servidor pronto!");
} catch (Exception e) {
System.err.println("Capturando excecao no Servidor: " + e.toString());
e.printStackTrace();
}
}
AluMundoCliente.java:
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class AloMundoCliente {
private AloMundoCliente() {}
public static void main(String[] args) {
String host = "54.244.xxx.xxx";
try {
Registry registry = LocateRegistry.getRegistry(host);
AloMundo stub = (AloMundo) registry.lookup("AloMundo");
String resposta = stub.digaAloMundo();
System.out.println("resposta: " + resposta);
} catch (Exception e) {
System.err.println("Capturando a exceção no Cliente: " + e.toString());
e.printStackTrace();
}
}
}
AloMundo.java
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface AloMundo extends Remote {
String digaAloMundo() throws Exception;
}
Я выполняю telnet 54.244.xxx.xxx 1099 и его список.Я попробовал java AloMundoServidor -Djava.rmi.server.hostname='54.244.xxx.xxx'
И безуспешно!
Редактировать.: Решено
Запустить клиент:
java -Djava.security.policy=server.policy AloMundoCliente
Изменен код клиента в реестре с IP-адресом сервера:
Registry registry = LocateRegistry.getRegistry("xx.xx.xx.xx");
Создать server.policy:
grant{
permission java.security.AllPermission;
};
Запустить сервер:
java -Djava.security.policy=server.policy -Djava.rmi.server.hostname=XX.XX.XX.XX AloMundoServer