最近在寫Socket客戶端的時候遇到點問題
客戶端在創建時創建了2個線程
一個監聽鍵盤輸入事件,使用的是buffered,當檢測到輸入完成時寫入流發送給服務端。
String content = "";
while (!(content = bufferedReader.readLine()).equals("exit")) {
byte[] type= new byte[1];
type[0] = Const.Message;
byte[] bytes = EncodeKit.encode(type, content);
outputStream.write(bytes);
outputStream.flush();
}
一個while循環不停發送心跳包
一個while循環接收服務端發回來的消息
現在的問題是我想在客戶端知道服務端返回消息的時間有沒超過規定時間,如果有則判定該連接已斷開。
問題是接收消息的線程和發送心跳的線程是分開的?我如何知道當這條消息發送過去后服務端返回的消息有沒有
超過指定時間?
總感覺我的設計有問題,但又不知道如何實現,求解答。
ps:使用三個線程的原因是線程讀取方法是阻塞方法,如果在發送心跳的while循環中再寫一個接收消息的方法,那么
就會一直執行這個接收消息的方法,沒辦法再發送心跳了。
發送心跳代碼:
outputStream = socket.getOutputStream();
inputStream = socket.getInputStream();
while (true) {
Thread.sleep(time);//設置心跳間隔時間
byte[] type = new byte[1];
type[0] = Const.HEART;
byte[] bytes = EncodeKit.encode(type, "");
//發送心跳包
outputStream.write(bytes);
outputStream.flush();