私は現在、クライアント/サーバーソフトウェアを開発するプロジェクトに取り組んでいます。私は奇妙な問題を抱えていて、それをうまく解決しましたが、原因を完全に説明することができず、私は長い間捜索しました。while(真)は等しくないwhile(!false)
サーバー側でwhile(true)ループを使用して、以前のクライアントがソケットをクローズした後でもサーバーがクライアントを受け入れ続けるようにしたかったのです。
だから私はこのようにそれを構築しようとした:
public void run() {
Socket socket;
while(true) {
try {
socket = server.accept();
BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
while (socket.isConnected()) {
// TODO income handling
}
in.close();
out.close();
socket.close();
} catch (Exception e) {
break;
}
}
}
しかし、私はこのループに終了条件を追加するために私に言ってのIntelliJによるエラーメッセージが表示されました。しかし、私はキャッチステートメントで1つを持っています。
while(!false)
に
while(true)
を変更するには消えるために、エラーメッセージを主導してきました。誰も私に違いを説明して、最初の試みがうまくいかなかった理由は?私はそれが研究の間にこのように何回も行われたことを発見しました。
IntelliJには 'while(true)'を検出し、while(!false)は検出しないようになっているためです。いずれにしても、例外がループが終了する唯一の方法であってはなりません。 –
現在のIntelliJ IDEA(アルティメット版、2017.3)では、あなたのコードに対して警告も「while」エラーも表示されません。 '!false'のために私が得るのは、 '単純化することができます'ということだけです。 –
ええ、 'break'ステートメントを削除すると警告が表示されますが、' break'があるときは警告は表示されません。また、無限ループ検査は、 '!false'が' true'と同じであることを理解するのに十分スマートです。どのバージョンのIDEAを使用していますか? –