Inflearn brand logo image

인프런 커뮤니티 질문&답변

insub2004님의 프로필 이미지
insub2004

작성한 질문수

기초 탄탄! 독하게 시작하는 Java Part 3(하) : 소켓과 파일 I/O

TCP 에코 서버

reader.readLine() == null 의미

해결된 질문

작성

·

18

·

수정됨

0

TCP 에코 서버 실습하던 와중에 반복문 조건에서 궁금한게 있어서 질문 남김니다.

 

while((msg = reader.readLine()) != null) {
    // 로직
}

Q. 클라이언트가 연속적으로 msg를 보낼 의도가 있고 그렇게 보낸다고 해도 저 서버쪽의 반복문 안에서 로직을 처리하고 다시 조건을 확인하는 cycle이 엄청 빠를텐데

1. 만약 클라이언트는 여러번 메시지를 보낼 꺼지만, 서버입장에선 1cycle을 돌고 .readLine()으로 했을 때 reader(inputStream)가 비어있으면 null이지 않나요??

2. 저런 조건에서 null 조건이 성립하려면 EOF일 때만 null이되서 반복문을 빠져나오는건가요?

3. 아니면 애초에 null일 상황은 없지만 무한 루프를 만들기 위한 장치 인가요??

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

AI 답변을 참고하시면 되겠습니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다.

reader.readLine() != null이라는 조건에서 readLine() 메소드는 입력 스트림에서 한 줄씩 읽어와서 처리하는 역할을 합니다. 이 때 null을 반환하는 상황과 반복문에서의 동작을 이해하는 것이 중요합니다.

  1. readLine()의 동작: readLine() 메소드는 입력 스트림에서 한 줄을 읽어와서 문자열로 변환합니다. 그러나 입력 스트림이 아직 비어있다면, readLine()은 null을 반환하는 것이 아니라 데이터를 받을 때까지 기다립니다. 즉, 클라이언트가 데이터를 보내기 전까지는 블로킹 상태로 남아있습니다.

  2. null 반환 조건: readLine()이 null을 반환하는 경우는 입력 스트림의 끝에 도달했을 때, 즉 EOF (End of File) 일 때입니다. 서버에서 클라이언트의 연결이 닫히거나 종료될 때 스트림의 끝에 도달하여 null을 반환하게 되고, 이 경우 반복문을 빠져나오게 됩니다.

  3. 무한 루프를 위한 장치: while((msg = reader.readLine()) != null)는 특정 조건에서 반복문을 종료시키기 위한 장치입니다. 일반적 네트워크 통신에서는 연결이 끝날 때까지 메시지를 처리해야 하므로, 연결 종료(EOF) 전까지 데이터를 지속적으로 처리할 수 있도록 설계합니다.

이와 관련된 내용은 네트워크 통신에서 readLine()의 사용과 동작 방식에 대해 보다 깊게 이해할 수 있는 포인트입니다. 아래는 유사한 질문과 답변을 통해 보다 이해를 넓힐 수 있는 링크입니다:

이 설명이 도움이 되었기를 바라며 추가적으로 궁금한 점이 있거나 이해하기 어려운 부분이 있다면 계속 질문해 주세요. 지식공유자께서 여러분의 학습 여정을 도울 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

insub2004님의 프로필 이미지
insub2004

작성한 질문수

질문하기