Boa noite à todos.
Estou estudando rmi, e consigo executar os testes com sucesso em JVMs diferentes no mesmo computador, mas quando tento acessar o método de um computador diferente dá uma exception
Não há firewall nem nada do tipo bloqueando as conexões e não estou usando stubs ou skeletons porque li que no java 6 eles não são mais necessários
Uma coisa curiosa que eu notei usando o iptraf foi que quando invoco o metodo de uma jvm no mesmo computador ela parece redirecionar a requisição para uma outra porta
│┌127.0.0.1:1099		=		0			0           ----              lo                 │
│└127.0.0.1:51642		>		1			52           --A-            lo                 │
│┌127.0.1.1:41722		=		0			0           ----              lo                 │
│└127.0.1.1:49023		>		1			52           --A-           lo     
já em jvms em computadores diferentes ele não faz isso
192.168.0.164:1257		=       9		484		RESET		eth0
│└192.168.0.200:1099	=       7		610		--A-		eth0
A exception
[list]
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: Connection refused: connect
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(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy0.soma(Unknown Source)
at Cliente.main(Cliente.java:7)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.(Unknown Source)
at java.net.Socket.(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
… 8 more
[/list]
Código da interface que é usada no rmi
import java.rmi.*;
public interface IServico extends Remote {
	public int soma (int a, int b) throws RemoteException;
}
implementação da interface
import java.rmi.*;
import java.rmi.server.*;
public class Servico extends UnicastRemoteObject implements IServico {
	public Servico() throws RemoteException {
	}
	public int soma (int a, int b) throws RemoteException {
		return a + b;
	}
	
}
Código que registra o rmi
import java.rmi.*;
public class Servidor {
	public static void main (String args[]) {
		try {
			IServico servico = new Servico();
			Naming.bind ("Servico", servico);
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}
codigo que consome o rmi
import java.rmi.*;
public class Cliente {
	public static void main (String args[]) {
		try {
			IServico servico = (IServico) Naming.lookup("rmi://192.168.0.200/Servico");
			System.out.println (servico.soma(2,3));
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}