如何在java中创建SocketClosedHandler?
如何检测java套接字(客户机套接字或服务器套接字)何时关闭&在发生关闭事件时执行回调方法? 我不想使用异常处理来实现这一点。我正在寻找一种解决方案,如事件处理程序或回调方法,类似这样的解决方案(这只是一个虚构的代码!):如何在java中创建SocketClosedHandler?,java,sockets,handler,Java,Sockets,Handler,如何检测java套接字(客户机套接字或服务器套接字)何时关闭&在发生关闭事件时执行回调方法? 我不想使用异常处理来实现这一点。我正在寻找一种解决方案,如事件处理程序或回调方法,类似这样的解决方案(这只是一个虚构的代码!): 为什么不能使用异常处理?这就是API的设计方式 要做到这一点,唯一的其他方法是设计您的协议,以便另一方在即将关闭之前发送某些内容,以便可以首先对close()进行本地调用,但这并不总是有效的,例如,如果连接意外关闭。是否要处理关闭套接字的事件或“另一端”关闭套接字的事件?在第
为什么不能使用异常处理?这就是API的设计方式
要做到这一点,唯一的其他方法是设计您的协议,以便另一方在即将关闭之前发送某些内容,以便可以首先对
close()
进行本地调用,但这并不总是有效的,例如,如果连接意外关闭。是否要处理关闭套接字的事件或“另一端”关闭套接字的事件?在第一种情况下,可以对套接字进行子类化,并添加在调用“close”时调用的处理程序
在后一种情况下,问题在于这不是自动检测到的,可靠地检测它可能很困难,并且取决于用于通过套接字进行通信的协议。参见例如,SO问题。通常,您必须采取措施来确定插座是否已被另一侧关闭。如果是这样,你需要采取行动。无论您采取什么操作,都可以确保它还调用您为该操作注册的回调处理程序
Socket s = new Socket(ip, port);
s.addSocketClosedHandler(new SocketClosedHandler(){
@Override
public void onSocketClosed(SocketClosedEvent e){
...
}
});