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