今天研究这个问题搞了整整一天啊!终于出来了,不过我没有多大的成就感,为什么呢?因为这不是我的劳动成果。同样的问题,我却没想出来!心塞的很啊……
不过还是要给大家分享一下,希望给大家带来帮助!
先声明一下:不是我不放源码,是因为这个功能是我项目的一小部分,贴源码太声势浩荡了,,而且下载后不一定能用,所以就贴核心代码啦~
我是以每分钟向服务端发送一个心跳来保持连接的,如下:
sendObject()中的代码(就是发送内容到服务端):
public void sendObject(String obj) throws IOException {
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
os.write(obj.getBytes());
os.flush();
System.out.println("发送:" + obj + "客户端");
}
重点来了,怎么保证服务重启时候自动连接呢?
public static void resetSocket(){
while(SocketClient.isServerClose(socket)){
try {
socket = new Socket(SERVERIP,PORT);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
} catch (IOException e) {
System.out.println("正在重连....");
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
}
/**
* 判断是否断开连接,断开返回true,没有返回false
* @param socket
* @return
*/
public static Boolean isServerClose(Socket socket){
try{
socket.sendUrgentData(0);//发送1个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信
return false;
}catch(Exception se){
return true;
}
}
最后,将SocketClient.resetSocket();放入图片中的catch{}中,捕获异常的时候重新连接,就可以实现想要的效果了。
希望给大家带来帮助,谢谢!