【发布时间】:2017-04-28 16:48:54
【问题描述】:
我正在开发一个聊天,首先我使用套接字和流在服务器和客户端之间进行通信,我已经和我的朋友一起测试过它并且它有效。现在我正在尝试转换为 RMI。
所以,它在本地工作,但是当我的朋友尝试连接时,他的连接被拒绝。奇怪的是它显示了服务器本地ip(192.168.25.28)。
我的代码如下所示:
public void conectar() throws RemoteException, MalformedURLException, NotBoundException{
// COMUNICADOR SERVIDOR (USADO PELO CLIENTE)
comunicadorServidor = new ComunicadorServidor(id); // cria um novo comunicador
LocateRegistry.createRegistry(8081); // inicia o registro RMI na porta 8081
Naming.rebind("//:8081/ComunicadorServidor", comunicadorServidor); // vincula o objeto comunicador ao endereço RMI
// COMUNICADOR CLIENTE (USADO PELO SERVIDOR)
comunicador = (IComunicadorCliente) Naming.lookup("//" + conexao.getInetAddress().getHostAddress() + ":8082/ComunicadorCliente"); // procura o comunicador no cliente
}
所以我在服务器和客户端都使用 RMI,并且一个相互连接,因为在服务器中我有客户端使用的身份验证和发送消息等方法,而在客户端我有更新用户列表和接收等方法消息,服务器使用。
首先我创建一个 RMI 类的实例(服务器端),在端口 8081 上创建一个注册表,然后将该对象绑定到端口 8081,名称为“ComunicadorServidor”。
然后服务器尝试连接到客户端 RMI。
所以我读到了 rebind 方法,如果我不指定地址,它会绑定到本地主机地址,我问:即使它绑定到我的本地机器,它在外面是否仍然可用?如果没有,我如何将它绑定到与套接字相同的位置,我只需指定一些端口,它将可用于任何地址,如 localhost、本地 ip 或外部 ip。
关于查找,获取客户端 IP 的最佳方法是什么(现在我正在从套接字获取),我如何确定我将获得正确的 IP?我可以在没有套接字的情况下连接到客户端 RMI 吗?
在客户端它本质上是一样的,除了它将 RMI 类绑定到 8082 并使用提供的 IP 和端口在服务器端查找 RMI 类。
【问题讨论】:
标签: java sockets binding chat rmi