강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của dohee
dohee

câu hỏi đã được viết

Bài giảng sách khủng long hệ điều hành

06. Giao tiếp liên tiến trình trong thực tế: Chapter 3. Processes (Part 4)

자바 serversocket 관련 질문입니다.

Viết

·

141

0

교수님 안녕하십니까, 강의를 수강하다 이해가 안 가는 부분이 있어 질문드립니다.

 

06. 프로세스간 통신의 실제: Chapter 3. Processes (Part 4) 강의 30:57 부분에서 출력 스트림으로 데이터가 나가고 있는 상황이어도 socket은 비어 있으니, 다른 클라이언트의 요청을 받을 수 있다고 하셨는데 주어진 코드로 이 과정이 가능한지 의문이 들어 질문 드립니다. 해당 코드에서 계속 출력 스트림을 열어놓으려면 client.close() 부분을 제거해야 될 것 같은데 이러면 기존의 client에 새로 요청 들어온 client가 덮어 씌어 지는 건가요..?

 

좋은 강의 감사드립니다.

답변 기다리겠습니다:)

운영체제동시성

Câu trả lời 1

0

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

자바에서 ServerSocket과 클라이언트의 연결 관리는 다소 복잡할 수 있습니다. 여러분이 언급하신 부분에 대해 조금 더 설명을 드리겠습니다.

  1. 클라이언트 소켓 관리를 위한 코드 구조:
    서버가 여러 클라이언트의 요청을 처리할 수 있는 원리는 새로운 연결 요청이 들어올 때마다 accept() 호출을 통해 새 클라이언트 소켓 객체를 생성하는 데 있습니다. 이렇게 생성된 소켓은 별도의 출력 스트림을 가집니다.

  2. 클라이언트 관리의 이슈:
    client.close()를 제거하시면, 소켓이 닫히지 않기 때문에 스트림이 열려 있는 한 클라이언트와 서버 간의 연결이 유지됩니다. 이는 여러 클라이언트를 동시에 지원하기 위해 대부분의 서버 구현에서는 각 클라이언트 연결을 새로운 스레드에서 처리하게끔 코드를 구성합니다. 따라서 기존 클라이언트를 새 클라이언트가 덮어쓰지 않습니다. 대신 이 새 클라이언트는 각각의 개별 스레드를 통해 별도로 관리됩니다.

  3. 멀티클라이언트 지원:
    멀티 클라이언트를 지원하기 위해 각 클라이언트 요청에 대해 새로운 스레드를 생성하여 처리하는 방식이 일반적입니다. 이럴 경우, 서버는 계속해서 accept()를 호출하고, 각각의 클라이언트 연결이 독립적으로 관리됩니다.

자바에서 ServerSocket의 활용법에 대해 더 알아보시려면 아래의 유사한 주제에 대한 설명을 참고하시는 것도 좋습니다.
- 06. 프로세스간 통신의 실제: Chapter 3. Processes (Part 4) 에 그림 3.16 3.17 실습 오류

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

Hình ảnh hồ sơ của dohee
dohee

câu hỏi đã được viết

Đặt câu hỏi