"IRC(Internet Relay Chat)는 1988년에 만들어진 인터넷에 연결된 컴퓨터 간의 실시간 문자 메시징을 위한 프로토콜 입니다 . 두 사용자 간의 개인 메시지, 데이터 전송을 지원하지만 주로 "channels"라는 채팅방에서 그룹 토론에 사용됩니다. 다양한 서버 측 및 클라이언트 측 명령을 제공합니다. 2011년 4월 기준으로 상위 100개 IRC 네트워크는 수십만 개의 채널에서 동시에 500,000명 이상의 사용자에게 서비스를 제공했습니다.
출처
- C++ 98로 IRC 서버를 개발해야 합니다.
- 서버는 동시에 여러 클라이언트를 처리할 수 있어야 하며 중단되지 않아야 합니다.
- 이러한 모든 작업(읽기, 쓰기 및 수신 등)을 처리하는 데는 하나의 poll()(또는 이와 동등한 것)만 사용할 수 있습니다.
- IRC 클라이언트는 오류 없이 서버에 연결할 수 있어야 합니다.
- 클라이언트와 서버 간의 통신은 TCP/IP(v4)를 통해 이루어져야 합니다.
- 우리 서버에서 IRC 클라이언트를 사용하는 것은 공식 IRC 서버에서 사용하는 것과 유사해야 합니다. 그러나 다음 기능만 구현하면 됩니다.
- IRC 클라이언트를 사용하여 인증하고, 닉네임/사용자 이름을 설정하고, 채널에 가입하고, 비공개 메시지를 보내고 받을 수 있어야 합니다.
- 한 클라이언트에서 채널로 전송된 모든 메시지는 채널에 참여한 다른 모든 클라이언트에게 전달되어야 합니다.
- 운영자와 일반 사용자가 있어야 합니다.
- 그런 다음 운영자에게 특정한 명령을 구현해야 합니다.
- 오늘의 운세를 알려주는 Bot을 구현해야 합니다.
- 저장소 복제
git clone https://github.com/im-madylin/ft_irc.git
- 디렉토리 이동
cd ft_irc
- 컴파일
make
- IRC 서버
./ircserv <PORT> <PASSWORD>
- PORT : IRC 서버가 연결을 수신할 port
- PASSWORD : IRC 클라이언트가 IRC 서버 연결 시 사용할 password
- IRC 클라이언트 (LimeChat, WeeChat 등 IRC 클라이언트를 사용할 수도 있습니다.)
nc <IP ADDRESS> <PORT>
- IP ADDRESS : 호스트 IP 주소
- PORT : 연결할 IRC 서버 port
IRC 서버에서 사용할 수 있는 명령은 다음과 같습니다.
명령어 | 설명 |
---|---|
PASS | 연결할 서버의 비밀번호를 입력합니다. PASS <PASSWORD> |
NICK | 사용자에게 닉네임을 설정하거나 기존 닉네임을 변경합니다. NICK <NICKNAME> |
USER | 연결 시작 시 새 사용자의 사용자 이름과 실제 이름을 설정합니다. USER <USERNAME> 0 * <REALNAME> |
PING | 서버와의 연결을 확인합니다. PING |
MODE | 설정을 변경합니다.(Operator만 사용 가능) MODE <CHANNEL> <MODE> <MODE> : +/- 를 사용하여 설정 추가/삭제 i : 초대한 사람만 입장 가능, t : Operator만 Topic 변경 가능, k <PASSWORD> : 채널에 비밀번호 설정, o <NICKNAME> : Operator 권한 부여, l <NUMBER> : NUMBER만큼 입장 가능 |
JOIN | 채널에 참여를 요청합니다. JOIN <CHANNEL>{,<CHANNEL>} [<KEY>{,<KEY>}] |
INVITE | 채널에 사용자를 초대합니다. INVITE <CHANNEL> |
PART | 채널에서 퇴장합니다. PART <CHANNEL> |
TOPIC | 채널의 주제를 변경하거나 확인합니다. TOPIC <CHANNEL> {<CONTENTS>} |
KICK | 채널에서 사용자를 퇴장시킵니다. KICK <CHANNEL> |
PRIVMSG | 사용자나 채널에 메시지를 전송합니다. PRIVMSG <NICKNAME/CHANNEL> <MESSAGE> |
BOT | 오늘의 운세 봇을 실행하여 운세를 받습니다. PRIVMSG <CHANNEL> !<BIRTHDAY> |
NOTICE | 사용자에게 메시지를 전송합니다. NOTICE <NICKNAME> <MESSAGE> |
WHO | 채널 참여자 정보를 확인합니다. WHO <CHANNEL> |
QUIT | 클라이언트 세션을 종료합니다. QUIT |