JavaでBufferedReaderを囲むwhileループを使用する際に問題が発生しています。私はソケットでいくつかの実験をしています。BufferedReaderを使用してWhileループでスタックするには
私の現在のコード:
InetAddress address = InetAddress.getByName(this.IP);
SocketAddress socketaddress = new InetSocketAddress(address, this.port);
Socket socket = new Socket();
socket.connect(socketaddress);
if(socket.isConnected()){
Executor.logger.info("Connection to proxy established!");
}
else {
Executor.logger.warning("Connection to proxy failed!");
socket.close();
return;
}
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String temp2;
while((temp2 = in.readLine()) != null){
Executor.logger.info("Running query says " + temp2);
}
は、しかし、私はコードを試してきたものに関係なく次の行に進まないだろう。私のロガーを何かで迷惑をかけることはありません。突然停止してしまいます。
これはクライアント側のみであり、受信側のサーバー側を制御していません。
何か間違っていますか?
ご協力いただきありがとうございます。
編集
サーバーは、あなたがちょうど何をしたかの結果を伝えるコードを変数とリターンとのコマンドを受け付け、コマンド・ラインです。しかし、最初に接続すると、メッセージ、空白行、メッセージ、空白行のようなものが返りますが、これは現在ループが止まっています。
データを待っているので、 'readLine()'で*ブロックします。 'readLine()'は 'null'を返しませんが、データが入っていないので、データが到着するのを待っています。おそらくサーバーは、より多くのデータを返すまであなたからの入力を待っています。また、データを受信して同時にデータを送信できるように、ライター用に別のスレッドが必要です。 – Kayaman
BufferedReaderが空のときに検出する方法はありますか?私はコンストラクタの内部に基づいて進歩するコードが必要です。 – Harieo
DataFetcherのようなスレッド・リスナーを使用する必要があります。https://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/io/DataFetcher.java – ControlAltDel