当使用java进行socket长连接的时候,由于种种原因可能会导致连接断开。对于C++的socket类,可以通过select来检测连接是否正常,但是java并没有,需要自己去实现。
有一些文章中提到可以通过sendUrgentData函数来进行socket连接状态的检测,但是这个方法是不完善的,因为当你连续向服务器发送15条UrgentData之后,服务器会认为你大量占用紧急数据资源,从而关闭与你的连接,所以这个方法不应该正式被使用。
对于这种情况,我们其实可以通过简单的write函数来实现。
以下为示例:
Socket socket=new Socket(ip,port);
while(1)
{
OutputStream os=socket.getOutputStream();
try{
os.write(100);
}
catch(IOException e){
try{
socket = new Socket(ip, port);
break;
}catch(e)
{
}
}
}
在这段代码中。我们直接向输出流中写入一个byte数据,如果连接断开,write函数就会抛出异常,我们就可以捕获到异常并进行重连。要注意的是,因为重连也有可能失败,所以我们需要把new socket操作也放在try里,并且一直循环,直到新建连接之后break。