현재 클라이언트/서버 소프트웨어를 개발중인 프로젝트에서 작업하고 있습니다. 나는 이상한 문제가 있었지만 잘하면 해결했다. 그러나 나는 그 원인을 완전히 설명 할 수 없으며 오랜 시간 동안 수색했다.while (true)는 동등하지 않습니다 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에 의해 오류 메시지를 받았습니다. 그러나 나는 잡기 성명서에 하나를 가지고있다.
while(!false)
에
while(true)
변경이 사라질 때까지 오류 메시지가 이어졌다. 아무도 저에게 차이점을 설명 할 수 있고 왜 첫 번째 시도가 효과가 없었습니까? 나는이 방법을 여러 번 연구 중에 발견했습니다.
IntelliJ에는 while (true)를 감지하고 while (! false)를 감지하지 못하기 때문에 분명히 있습니다. 어쨌든 예외가 루프가 끝나는 유일한 방법은 아니어야합니다. –
현재 IntelliJ IDEA (Ultimate 버전, 2017.3)에서 경고 메시지가 표시되지 않으며 코드에 'while'오류가 표시되지 않습니다. '! false'에 대해서는 내가 얻을 수있는 유일한 것이 '간소화 될 수 있다는 것'입니다. –
예, 'break' 문을 제거하면 경고가 표시되지만'break '가 있으면 경고가 표시되지 않습니다. 또한 무한 루프 검사는'! false'가'true'와 동일하다는 것을 이해할만큼 똑똑합니다. 어떤 버전의 IDEA를 사용하고 있습니까? –