一、主要目的
在后台监听连接状态,当网络断开时尝试重新连接。
二、异步监听重连的逻辑
(一)获取和设置客户端的类
public class Context{
private Socket sock;
public Context(){}
// 获取客户端
public Socket get(){
return this.sock;
}
// 再次连接
public void connect(){
String = "www.srer.com";
int port = 5555;
sock = new Socket(host, port);
}
}
(二)监听线程的逻辑
while(true){
// 如果没有处在连接状态
while(isRun && !context.get().isConnected()){
// 更新状态
status.set(6, "网络中断,进入重连");
try {
// 执行重连方法
context.connect();
} catch(SocketException e){ }
}
// 休眠500毫秒
Thread.sleep(500);
}
三、其他方式
除了定时扫描状态后重连,也可以在收发方法执行出现异常的时候触发重连方法。
// 发送方法
void send(String str){
try {
// 执行底层发送
Util.send(str);
} catch(SocketException e){
// 通知发送失败
notify.info("发送失败,开始重连");
// 重连方法
context.connect();
}
}
重连方法应该加锁执行,可能出现接收线程和发送线程同时触发重连方法。
或者只让接收线程来在接收失败时,触发重连方法。