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

장재현님의 프로필 이미지
장재현

작성한 질문수

즐거운 자바

채팅 프로그램 만들기 1/2

Socket의 InputStream

작성

·

466

·

수정됨

0

부부개발단 단톡방 : https://open.kakao.com/o/gcbnd3Ie

먼저 질문을 올리기 전에 직접 문제를 해결할 수 없는지 고민해보세요.

구글 등에서 먼저 궁금한 부분을 찾아보세요.

구글 검색등을 통해서도 답변을 찾기 어려웠다면 단톡방에서 함께 공부하고 있는 분들과 토론해보세요. (단톡방에 저도 틈틈히 답변을 드립니다.)

그래도 궁금증이 해결이 안된다면 인프런에 질문을 올려주세요. (인프런은 며칠에 한번씩 제가 방문해서 답변을 달것 같아요.)

 

네트워킹 프로그래밍 1/2 강의에서 Socket으로 부터 getInputStream을 호출하고 BufferedReader를 사용하여 request 정보를 한줄씩 읽어들어왔었습니다.

InputStream in=socket.getInputStream();

BufferedReader buf=new BufferedReader(new InputStreamReader(in));

String firstline=buf.readLine();
String line=null;
while(!(line= buf.readLine()).equals("")){
System.out.println(line);
}

요청 정보를 한줄 씩 읽어 들였습니다. 첫 줄은 요청 정보 요약 그 줄 이후엔 header 정보를 출력했습니다. 그런데 채팅 프로그램 만들기 1/2에선 똑같은 코드로 접속한 모든 클라이언트에게 입력된 메시지를 전송한다고 하셨고 cmd로 명령을 실행시켜 입력을 하면서 다른 클라이언트에게 입력된 메시지가 출력되는걸 보여주셨는데 어느 때에는 입력한 값이 나오고 어느 때에는 요청 정보 및 header가 나오는지 정확히 모르겠습니다.

답변 2

0

질문을 제가 잘 이해를 못해서 답변이 어려운데요.

 

브라우저가 클라이언트일 경우엔 브라우저가 http프로토콜에 맞게 서버에게 요청을 합니다. 프로토콜이란 클라이언트와 서버간의 통신 규칙을 말합니다. http프로토콜이란 규칙으로 브라우저와 서버는 통신합니다.

접속이 되면

요청라인(1줄)
헤더(여러줄)
공백
바디(값이 없을 수 있음)

이런 식으로 정보를 보내게 됩니다. 서버는 한줄씩 읽어들여 그 결과를 출력하게 됩니다.

채팅의 경우는 클라이언트와 서버간에 통신하는 것을 개발자가 직접 어떻게 데이터를 주고 받을 지 결정해야 합니다. 위의 헤더라는 것은 브라우저 요청에서나 있는 일이지 채팅에서는 있는 일이 아닙니다.

0

안녕하세요, 인프런 AI 인턴이에요.

Socket을 이용하여 네트워크 프로그래밍을 할 때, 클라이언트로부터 들어오는 메시지를 모든 클라이언트에게 전송하는 채팅 프로그램을 만들고 싶으신 것 같네요.

Socket의 InputStream을 사용해서 클라이언트로부터 들어오는 메시지를 읽어들일 수 있습니다. 위에서 언급하신 코드처럼 InputStream을 가져오고 BufferedReader를 사용하여 한 줄씩 읽어들일 수 있습니다.

하지만 이 경우에는 클라이언트로부터 메시지를 받는 것이고, 클라이언트에게 메시지를 전송하는 것은 별도의 OutputStream을 사용해야 합니다. 채팅 프로그램에서는 서버가 모든 클라이언트에게 메시지를 전송하는 것이기 때문에, 서버 측에서는 클라이언트로 메시지를 보내는 OutputStream도 사용해야 합니다.

따라서, 채팅 프로그램에서는 클라이언트가 전송한 메시지를 읽어들이는 부분과, 모든 클라이언트에게 메시지를 전송하는 부분을 구현해야 합니다.

참고로, 클라이언트로부터 들어오는 메시지를 받을 때에는 무한 루프를 사용하여 계속해서 메시지를 읽을 수 있도록 해야합니다.

마지막으로, 채팅 프로그램의 전체적인 구조가 궁금하신 경우에는 채팅 프로그램을 구현한 강의들을 참고하시는 것이 좋을 것 같아요.

더 궁금한 사항이 있으시면 언제든지 물어보세요.

장재현님의 프로필 이미지
장재현

작성한 질문수

질문하기