Skip to content
/ IRC Public

C++를 사용하여 IRC (Internet Relay Chat) 프로토콜에 기반한 채팅 서버를 구축하는 프로젝트

Notifications You must be signed in to change notification settings

bluedog129/IRC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 

Repository files navigation

IRC 채팅 서버

이 프로젝트는 C++을 사용하여 구현된 IRC(Internet Relay Chat) 프로토콜 기반 채팅 서버입니다.

프로젝트 요구사항
  1. 기본 요구사항:
    • 서버는 여러 클라이언트를 동시에 처리할 수 있어야 하며, 절대 멈추지 않아야 합니다.
    • Fork를 사용하지 않고, 모든 I/O 작업은 non-blocking이어야 합니다.
    • Poll() (또는 유사한 것 ex: kqueue) 하나만을 사용하여 모든 작업 (읽기, 쓰기, 듣기 등)을 처리해야 합니다.
    • 서버는 TCP/IP (v4 또는 v6)를 통해 클라이언트와 통신해야 합니다.
    • 클라이언트가 서버에 연결하기 위해서는 포트 번호와 연결 비밀번호가 필요합니다.
  2. 클라이언트와 서버 간의 커뮤니케이션:
    • 클라이언트는 서버에 연결하고 채널에 가입할 수 있어야 합니다.
    • 서버는 클라이언트가 보낸 메시지를 해당 채널의 모든 다른 클라이언트에게 전달해야 합니다.
    • 사용자 인증, 닉네임 설정, 유저네임 설정, 채널 참여, 개인 메시지 송수신 등의 기능을 구현해야 합니다.
  3. 채널 운영자 및 사용자 권한:
    • 채널 운영자와 일반 사용자를 구분해야 합니다.
    • 채널 운영자 전용 명령어 (예: KICK, INVITE, TOPIC, MODE 등)를 구현해야 합니다.
  4. 추가 요구사항:
    • 코드는 C++ 98 표준을 준수해야 하며, 필요한 경우 std=c++98 플래그를 추가하여 컴파일할 수 있어야 합니다.
    • Makefile을 사용하여 소스 파일을 컴파일해야 하며, 프로그램은 어떠한 상황에서도 충돌하거나 예상치 못하게 종료되어서는 안됩니다.
이 정보를 바탕으로, IRC 서버를 설계할 때 각 기능별로 분리하여 구현하는 것이 좋습니다. 예를 들어, 네트워크 연결 처리, 사용자 인증, 메시지 전달 및 처리, 채널 관리 등을 별도의 모듈로 구성할 수 있습니다. 

코드는 간결하고 이해하기 쉬워야 하며, 다양한 에러 상황에서도 안정적으로 작동해야 합니다.




과제 세부 내용

과제에 대한 세부 정보는 다음 블로그를 통해 확인할 수 있습니다
블로그 링크



실행 방법 및 실행 예시

실행 방법

채팅 서버를 실행하기 위해서는 다음의 단계를 따라야 합니다:

우선 채팅서버를 실행시킵니다.

  1. 소스 코드를 컴파일합니다. make
  2. 컴파일된 실행 파일을 실행합니다. ./ircserv
서버실행 영상
default.mov

irssi 프로그램을 실행하여 클라이언트로서 접속을 시도합니다.

  1. 새로운 터미널에 irssi 명령어를 실행합니다.
  2. "/connect -nocap 127.0.0.1 6667 12345678 [유저이름]" 으로 채팅프로그램에 접속을 시도합니다.
irssi 실행 영상
irssi.mov



실행 예시

실행되는 모습은 아래 영상을 통해 확인할 수 있습니다:

join 명령어
join.mov
part 명령어
part.mov
mode +o 명령어 - /mode: IRC에서 채널이나 사용자의 모드를 설정하거나 조회하는 데 사용되는 명령어입니다.
- +o: 이는 "operator flag"를 설정하는 것으로, 대상 사용자에게 오퍼레이터 권한을 부여합니다. 오퍼레이터는 채널에서 사용자를 추방하거나, 채널 모드를 변경하는 등의 관리 작업을 수행할 수 있습니다.
- 사용자이름: 오퍼레이터 권한을 부여하고자 하는 사용자의 닉네임입니다.
mode+o.mov
mode +i, invite 명령어 - /mode +i 명령어는 채널에 "초대 전용(invite-only)" 모드를 설정합니다. 이 모드가 설정되면, 채널에 들어올 수 있는 사람들을 제한하여 오직 초대받은 사용자만이 채널에 접근할 수 있게 됩니다. 이는 특정 주제에 대해 논의하거나, 특정 그룹의 멤버만을 위한 공간을 만들고자 할 때 유용합니다.
  • /invite 명령어는 특정 사용자를 현재의 채널로 초대하는 데 사용됩니다. 채널이 초대 전용 모드일 때 더욱 유용하며, 이 경우 초대받은 사용자만이 채널에 입장할 수 있습니다.
+i_invite.mov
- /mode #채널이름 +k 비밀번호
- mode +k는 해당 채널에 비밀번호를 적용하는 명령어 mode +k 명령어
keyword.mov

About

C++를 사용하여 IRC (Internet Relay Chat) 프로토콜에 기반한 채팅 서버를 구축하는 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published