サーバーソケットを使用して、クライアントとサーバー間の接続をセットアップしようとしています。私も使っていません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 は、私が制御しようとしている定数ではありません。
私が検索した他のスレッドは、匿名クラス内の main 内に変数を配置するだけですが、クライアントが切断された場合に while ループを停止するには stopThread が必要です。
誰にもアイデアはありますか?
ありがとう!