Java RMI发送最后一条消息后发生异常



所以我使用RMI在Java中制作了客户机/服务器对。关键是将消息从客户端发送到服务器,并打印出我们收到了多少消息和丢失了多少消息(我将其与UDP进行比较,所以不要问为什么我期望使用RMI丢失任何消息)。

所以无论如何,写了代码,一切似乎都工作得很好,我绑定到服务器并发送消息,服务器接收它们并输出结果。

唯一的问题是,在我从客户端发送了最后一条消息后,它抛出了一个RemoteException,我不知道为什么。

我唯一的猜测是服务器已经关闭了,所以它让我知道我不能再联系服务器了(即我的iRMIServer变量现在无效)。

有趣的是,我认为客户端会首先关闭,因为它在发送消息后终止。它没有首先关闭的原因可能是因为它必须等待来自服务器的应答(ACK)来确认收到消息。

也许在这个服务器回复让我们知道一切正常的重叠时间里,服务器关闭了,我们无法再次连接到它。

客户端发送消息的代码如下:

   try { 
         iRMIServer = (RMIServerI) Naming.lookup(urlServer); 
         // Attempt to send messages the specified number of times 
         for(int i = 0; i < numMessages; i++) { 
            MessageInfo msg = new MessageInfo(numMessages,i); 
            iRMIServer.receiveMessage(msg); 
         } 
    } catch (MalformedURLException e) { 
        System.out.println("Errpr: Malformed hostname."); 
    } catch (RemoteException e) { 
        System.out.println("Error: Remote Exception."); 
    } catch (NotBoundException e) { 
        System.out.println("Error: Not Bound Exception."); 
    } 

如果我选择1000条要发送的消息,它将从0-999发送消息。

在从服务器打印出结果后,我立即调用System.exit(),这可能导致它提前终止,而无需等待来自客户端的适当响应?

如果你能帮助我,我将非常感激,如果你需要更多的信息,我很乐意提供。

您不能在远程方法中关闭服务器。服务器必须返回一个OK或异常状态,如果方法有返回值,则返回值,这就是客户端在尝试接收时失败的原因。

相关内容

  • 没有找到相关文章

最新更新