멀티스레드 소켓 서버(multi_server.cc)와 터미널 클라이언트(chat_client.cc)로 구성된 채팅 프로그램입니다.
제공된 multi_server.cc를 기반으로, 클라이언트 기능에 맞춰 서버를 확장했습니다.
g++ -o multi_server multi_server.cc -lpthread
g++ -o chat_client chat_client.cc -lpthread./multi_server 9000 # 서버 (포트 지정)
./chat_client 127.0.0.1 9000 # 클라이언트 (여러 개 접속 가능)접속 후 /help 로 전체 명령어를 볼 수 있습니다.
기본: 서버 연결 / 송수신 / 종료
확장
- 닉네임(중복 방지), 입장·퇴장 알림, 접속 시간
- 채널/방:
/join/rooms, 방별 격리, 프롬프트에 현재 방 표시 - 방 권한: 생성자=방장,
/delete/grant/revoke/owner - 메시지 히스토리(스크롤백): 방 입장 시 최근 대화 재생
- 답글
/reply(각 메시지 #번호), 귓속말/w - 텍스트 색상
/color, 이모티콘(:코드+Tab), 메시지 시간 태그 - 방 파일 저장소:
/file업로드 →/files목록 →/get다운로드 (청크 + 진행률) - 로컬 파일 탐색:
/ls/cd/pwd - Tab 자동완성: 명령어 / 방이름 / 닉네임 / 답글·파일 번호 / 색상 / 파일경로 / 이모티콘
- 프로토콜:
TYPE\x1f필드…라인 기반 텍스트 프로토콜. TCP 스트림 재조립 버퍼로 부분 수신 처리. - 멀티스레드 유지: 접속 1건당 pthread 1개 구조를 유지하고, 공유 상태는
pthread_mutex로 보호(원본의 경쟁 상태 개선). - 클라이언트: termios raw 모드로 키 단위 입력을 받아 Tab 자동완성·한글(UTF-8) 안전 처리·입력줄 복원을 구현.
자세한 설계 의도는 각 소스 상단과 함수 주석에 정리되어 있습니다.