我試圖使用服務器套接字來建立客戶端和服務器之間的連接。我也沒有使用java.nio
。服務器套接字 - 發送測試消息以檢測連接
問題是我不斷地發送測試消息,並檢測它是否成功發送消息(客戶端仍然連接),如果沒有,則客戶端斷開連接。
如下所示:
try
{
Scanner in = new Scanner(socket.getInputStream());
BufferedReader in_2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(stopThread)
{
if(in_2.ready())
{
String message = in_2.readLine();
dt = new DateTime();
PrintStream out = new PrintStream(socket.getOutputStream());
server.detect(message, dataSets, out);
dataSets.add(message);
GUI.textArea_1.append(message + "\r\n");
GUI.textArea_1.setCaretPosition(GUI.textArea_1.getDocument().getLength());
}
else
{
PrintStream out = new PrintStream(socket.getOutputStream());
out.println("Testing Connection \r\n");
if(out.checkError())
{
try
{
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
stopThread = false;
GUI.textArea.append(userName + " disconnected \r\n");
GUI.textArea.setCaretPosition(GUI.textArea.getDocument().getLength());
server.inputDataForm(userName, dt, dataSets);
}
Thread.sleep(3000);
}
}
的問題是,Thread.sleep(3000)
實際上與獲取數據的干擾,因爲在3秒後,我會得到一個巨大的數據量(因爲我停止線3秒) 。
現在,我提出的是在else語句中的一個匿名類。
class runThread implements runnable
{
void run()
{
//Put the else statement here
}
}
但stopThread = FALSE不是一個常數,我試圖控制。
其他線程我搜索的只是把變量放在主要的匿名類中,但是我需要stopThread來停止while循環,如果客戶端斷開。
有沒有人有想法?
謝謝!
嗯...怎麼會停下來叫呢? – user1157751 2013-05-14 00:05:46
實際上最後我在shutdown()中創建了一個線程,它監視MutableBoolean,並且在客戶端斷開連接時停止。 – user1157751 2013-05-14 00:10:27
如果它工作,那麼很好!你可以通過創建MyRunner來調用stop(),然後在某個地方調用線程外部的stop。 – 2013-05-14 14:10:25