有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Socket如何在java中创建SocketClosedHandler?

如何检测javasocket(客户端socket或服务器socket)何时关闭&;发生关闭事件时是否执行回调方法? 我不想使用异常处理来实现这一点。我正在寻找一种解决方案,如事件处理程序或回调方法,类似这样的解决方案(这只是一个虚构的代码!):

Socket s = new Socket(ip, port);
s.addSocketClosedHandler(new SocketClosedHandler(){

    @Override
    public void onSocketClosed(SocketClosedEvent e){
        ...
    }

});

共 (2) 个答案

  1. # 1 楼答案

    为什么不能使用异常处理?这就是API的设计方式

    唯一的另一种方法是设计您的协议,以便另一方在即将关闭之前发送一些内容,以便可以首先对close()进行本地调用,但这并不总是有效的,例如如果连接意外关闭

  2. # 2 楼答案

    您想处理关闭插座的事件还是“另一侧”关闭插座的事件?在第一种情况下,可以对套接字进行子类化,并添加在调用“close”时调用的处理程序

    在后一种情况下,问题在于这不是自动检测到的,可靠地检测它可能很困难,并且取决于用于通过套接字进行通信的协议。参见例如thisSO问题。通常,您必须采取措施来确定插座是否已被另一侧关闭。如果是这样,你需要采取行动。无论您采取什么操作,都可以确保它也会调用为该操作注册的回调处理程序