과제 제출을 끝낸 후에야 작업과정을 정리할 수 있게 되었다. 원래는 차례대로 빌드업한 과정을 업데이트하고 싶었는데, 코딩하는데 시간이 모자라서 매일 업데이트를 할 수 가 없었다.
클라이언트는 위에서 보여주는대로
"./client 192.168.0.9:PORT RoomNumber Nickname
의 입력을 넣음으로 서버의 포트와 자신이 원하는 이름과 방번호를 주게 된다.이후의 과정은 위와 같다.
------------------------------------------------------------------------------------------------
이상하게 포스팅을 하려고 테스트를 하다 보면 자꾸 에러가 난다. 덕분에 문제를 더 고칠 수 있게 되었다. 과제 제출기간은 끝났지만...
모든 소스코드는 GitHub 에 올려놓았다.
그래서 완성된 프로젝트를 하나하나 나눠서 파트별로 설명하는게 나을 것 같다.
---------------------------------------------------
구현한 채팅서버가 할 수 있는 일은 다음과 같다:
1. 클라이언트와 소켓 통신 열기
2. 클라이언트로부터 정보(채팅서버에서 사용할 닉네임, 들어갈 채팅방 번호)를 전달받고, 서버쪽에서 관리하는 클라이언트 정보 테이블에 저장하기
3. 성공적으로 테이블에 저장한 후 채팅서버에 접속했다고 알리기. 이때 클라이언트는 최초로
"Hello 'Nickname'! This is room #'RoomNumber'"
라는, 본인이 요청한 Nickname과 RoomNumber로의 연결이 완료되었다는 메세지를 전송받는다.
"Hello 'Nickname'! This is room #'RoomNumber'"
라는, 본인이 요청한 Nickname과 RoomNumber로의 연결이 완료되었다는 메세지를 전송받는다.
이후에는 클라이언트 하나당 하나의 쓰레드를 열어서 패킷을 주고받는다.
①. 채팅방에 있는 모든 유저(본인 제외)에게 메세지를 전달하고 싶다면,
All : Message
의 식으로 패킷을 보내게 된다.
②. 채팅방에 있는 유저 중 특정 유저에게만 메세지를 전달하고 싶다면(귓속말),
Receiver1, Receiver2 : message
의 식으로 패킷을 보내게 된다.
③. 특정 유저에게 메세지를 N초후에 전달하고 싶다면,
Receiver1#N : message
의 식으로 패킷을 보내게 된다.
④ 다른 N번째 채팅방으로 옮기고 싶다면,
/join N
라는 패킷을 보내게 된다.
⑤ 현재 채팅방에 있는 유저들의 리스트를 받고 싶다면,
/list
라는 패킷을 보내게 된다. 이때, 본인의 이름 옆에는 *로 표시한다.
⑥ 접속을 종료하고 싶다면,
/quit
라는 패킷을 보내게 된다.
위에 적은 기능들은 서버 입장에서의 기능들이다.
왜 서버 입장에서 적었냐면, 서버쪽에서 대부분의 일을 하고, 클라이언트에서는 직접 키보드에서 입력받은 내용에 따라 어떻게 패킷을 구성하는 일만 하게 되기 때문이다.
클라이언트는 위에서 보여주는대로
"./client 192.168.0.9:PORT RoomNumber Nickname
의 입력을 넣음으로 서버의 포트와 자신이 원하는 이름과 방번호를 주게 된다.이후의 과정은 위와 같다.
------------------------------------------------------------------------------------------------
이상하게 포스팅을 하려고 테스트를 하다 보면 자꾸 에러가 난다. 덕분에 문제를 더 고칠 수 있게 되었다. 과제 제출기간은 끝났지만...
모든 소스코드는 GitHub 에 올려놓았다.
앞으로 각 기능별로 포스팅을 해나갈 것이다.
기능별로 포스팅이 안되어있어서 스스로 알아내는 중입니다 ㅠㅠ
답글삭제