-
[DEMO] Linux 채팅 프로그램 제작 프로젝트 (1/2)Project 2020. 5. 11. 20:29728x90
[ 목차 ]
1. 프로젝트 개요
1) 목표
2) 설명
3) 주요 일정
4) 유의 사항
2. 동작 과정
1) 기본 요구 사항 해결
2) 추가 요구 사항 해결
3. 구현 및 설명
1) 기본 요구 사항
2) 추가 요구 사항
3) 예외 처리 사항
1. 프로젝트 개요
1) 목표
카카오톡의 채팅 기능과 유사한 채팅 프로그램을 설계한다.
2) 요약
클라이언트는 닉네임 설정과 함께, 채팅방을 생성, 이동할 수 있다. 채팅 서버와 연결된 뒤 자신이 사용할 닉네임을 입력하면 채팅방 개설 또는 이동 후 채팅을 시작한다. 채팅 화면의 왼쪽에는 본인이 쓴 채팅 내용이, 오른쪽에는 상대방이 쓴 채팅 내용이 출력된다. 채팅 내용은 채팅방의 공유 폴더에 텍스트 파일로 저장된다. 채팅방 목록 확인, 채팅방 생성, 채팅방 이동, 파일 올리기, 파일 내려받기, 내 파일 목록, 채팅 내용 검색 기능을 수행할 수 있다. 종료 시그널을 입력하면 채팅 프로그램이 종료된다.
3) 주요 일정
단계
일정
비고
프로젝트 계획 및
요구사항 분석
11/26 – 11/28
프로젝트의 주제 등을 계획하고, 어떠한 기능을 포함할지 결정한다.
규모 산정 및
요구사항 해결
11/29 – 11/30
선정된 기능들 가운데 구현이 가능한 것을 분류하고, 구현 방법에 대해 논의한다.
1차 설계
12/1 – 12/4
계획서와 요구사항 명세서를 기반으로, 실제 코드를 작성하고 수정한다.
최종 설계 및
보고서 작성
12/5 – 12/8
1차 설계를 기반으로, 최종 설계를 마친 뒤 보고서를 작성한다.
4) 유의 사항
(1) 프로젝트 계획서의 안내에 따라, 유닉스 프로그래밍에서 배운 주제를 함축하였다.
(2) 사용한 주요 개념 및 함수는 다음과 같다.
file, directory 관련
open, creat, close, read, write, fopen, fclose, getchar, fgets, fputs, scanf, printf, remove, access, mkdir, rmdir, chdir, opendir, closedir, readdir,
시스템 정보 관련
localtime
Process 관련
exit, atexit
Signal 관련
signal
Socket 관련
socket, bind, listen, accept, connect, send, recv
Thread 관련
pthread_create, pthread_detach
2. 동작 과정
1) 기본 요구 사항 해결
(1) 공통 사항
프로그램의 동작 중 특정 기능의 수행을 원하면, 특정 시그널을 보낸다. 시그널은 SIGINT이며, 이 시그널을 보내면 수행 가능한 기능들이 나열된다. 원하는 기능의 번호를 누르면 해당 기능이 실행된다.
1. 채팅방 목록 2. 채팅방 생성 3. 채팅방 이동 4. 파일 올리기 5. 파일 내려받기 6. 내 파일 목록 7. 채팅 검색 (2) 채팅방의 생성 및 이동
클라이언트는 우선 사용할 닉네임을 입력한다. 입력 후 아래의 경우에 따라 진행된다. 채팅방의 생성과 함께, 채팅방에서 사용할 공유 폴더가 생성된다. 공유 폴더 명은 채팅방의 이름과 동일하다.
서버에 처음 연결 되는
클라이언트인 경우생성된 채팅방이 없으므로, 원하는 이름의 새로운 채팅방을 생성한다.
생성 후 클라이언트는 해당 채팅방으로 이동한다.그 이후에 서버에
연결되는 클라이언트인
경우기존 채팅방 목록을 보여준다.
기존 채팅방으로의 이동을 요청한 경우
방 번호를 입력하여 이동한다.
새로운 채팅방으로의 생성을 요청한 경우
‘2. 채팅방 생성’ 기능을 실행한다.
(3) 채팅의 시작
채팅방에 입장하면, 클라이언트의 개인 폴더가 생성된다. 채팅방의 공유 폴더에는 대화 내용이 저장될, 고유 이름을 가진 텍스트 파일이 생성된다. 클라이언트 간의 대화 내용이 텍스트 파일에 실시간으로 저장된다.
(4) 채팅
채팅 화면에서, 본인의 대화 내용은 왼쪽에, 상대방의 대화 내용은 오른쪽에 출력된다. 채팅방에 출력될 대화 내용은 요구사항과 동일한 형식으로 출력한다. 채탱 도중에 시그널(SIGINT)을 통해 여러 기능을 수행할 수 있다.
[본인 이름] 대화 내용 (hh : mm)
(hh : mm) [상대방 이름] 대화 내용
(5) 프로그램의 종료
채팅방을 나가기를 원하는 클라이언트는 ‘ctrl + ₩’를 입력한다. 입력과 동시에 프로그램은 종료되고, 채팅 방에서 사용한 개인 폴더도 삭제된다. 서버가 클라이언트의 연결을 관리하므로, 클라이언트가 채팅방을 나갈 때 서버에 알리게 된다. 만약 채팅방에 남은 인원이 없다며, 해당 채팅방의 소켓 파일, 채팅방 내용을 저장하는 파일, 공유 폴더 등은 삭제된다.
2) 추가 요구 사항 해결
(1) 공통사항
기본 요구 사항과 마찬가지로, 프로그램의 동작 중 특정 기능의 수행을 원하면, SIGINT시그널을 보낸다. 시그널을 보내면 수행 가능한 기능 이름이 나열된다. 원하는 기능의 번호를 누르면 해당 기능이 실행된다. 이 때, 기능 수행을 위해 입력한 문자열은 채팅 상대방에게 전달되지 않는다. 기능의 수행이 종료되면 채팅을 다시 시작할 수 있다.
1. 채팅방 목록 2. 채팅방 생성 3. 채팅방 이동 4. 파일 올리기 5. 파일 내려받기 6. 내 파일 목록 7. 채팅 검색 (2) 채팅방 목록
현재 생성되어 있는 채팅방들의 목록을 출력하는 기능이다. 본인이 참여하고 있는. 채팅방을 포함한, 모든 채팅방의 이름이 출력된다. 각 채팅방 이름 옆에는 참여 인원이 표시된다.
(3) 채팅방 생성, 이동
기본 요구 사항에서와 동일하게 동작한다.
(4) 파일 올리기
클라이언트의 개인 폴더의 파일을 채팅방의 공유 폴더에 업로드 하는 기능이다. 먼저 개인 폴더에 있는 파일을 나열하여 보여준 뒤 이 파일 중 업로드 할 파일명을 입력하면, 해당 파일은 동일한 이름으로 복사되어 서버의 공유 폴더에 저장된다. 만약 업로드 할 파일명이 잘못되거나, 개인 폴더에 없는 파일명을 입력할 경우, 파일이 없다는 출력문이 뜬다.
(5) 파일 내려받기
채팅방의 공유 폴더의 파일을 클라이언트의 개인 폴더로 다운로드 하는 기능이다. 먼저 서버의 공유 폴더에 있는 파일을 나열하여 보여준 뒤 이 파일 중 다운로드 할 파일명을 입력하면, 해당 파일은 동일한 이름으로 복사되어 개인 폴더에 저장된다. 마찬가지로 다운로드 할 파일명이 잘못되거나, 공유 폴더에 없는 파일명을 입력할경우, 파일이 없다는 출력문이 뜬다.
(6) 내 파일 목록
클라이언트의 개인 폴더에 있는 파일목록을 출력하는 기능이다. 클라이언트의 화면에 개인 폴더의 파일의 이름이 나열된다.
(7) 채팅 내용 검색
찾고자 하는 문자열을 검색하는 기능이다. 시간을 기준으로 검색할지, 문자열을 기준으로 검색할지 옵션을 선택할 수 있다. 옵션이 선택되면, 공유 폴더에 저장 되어 있는 텍스트 파일을 열고, 찾고자 하는 문자열과 행 단위로 비교한다. 검색을 성공한다면, 찾은 문장이 출력되고, 실패한다면, 검색에 실패하였다는 메시지가 출력된다. 만약, 선택한 옵션이 ‘단어 검색’이라면, 문자열을 포함하는 문장만 출력되고, ‘시간 검색’이라면, 해당 시간 이후의 모든 채팅이 출력된다.
(8) 채팅 프로그램 영문 ver
프로그램의 언어를 영어로 변경하는 기능이다.
3. 구현 및 설명
1) 기본 요구 사항
(1) 공통 사항
본 보고서에서 예시를 보여줄 때는 1개의 서버와 2명의 클라이언트를 가정하지만, 실제로는 3명 이상의 클라이언트도 동작이 가능하다. 시그널을 보내면, 다음과 같은 선택 화면이 뜬다. 원하는 기능의 번호를 입력하면 해당 기능을 수행할 수 있다.
(2) 채팅방의 생성 및 이동
서버에 처음 연결 되는 클라이언트인 경우 : 닉네임을 입력한 후, 생설할 방 이름을 입력한다. 입력 후 해당 방으로 이동한다.
그 이후에 서버에 연결되는 클라이언트인 경우 : 닉네임을 입력하면, 두 가지 옵션을 선택할 수 있다.
채팅방 목록에 이동을 원하는 채팅방이 있다면, “이동” 옵션을 누른 후, 해당 방 번호를 입력한다.
원하는 채팅방이 없다면, “방 개설” 옵션을 누른 후, 원하는 채팅방 이름을 입력한다.
다른 채팅방으로 이동을 원할 경우 : 시그널을 보내서 기능 선택화면을 연 후, 3번 기능을 수행한다. 채팅방 목록의 원하는 채팅방의 번호를 입력한다. 입력 후 해당 방으로 이동한다.
(3) 채팅
일반적인 채팅의 경우 : 본인의 대화 내용은 화면의 왼쪽, 상대방의 대화 내용은 화면의 오른쪽에 표시된다. 이름, 대화 내용, 시간이 약속된 형식에 맞게 출력된다. 다음은 2명을 가정한 대화이다.
다음은 3명을 가정한 대화이다.
clear 명령의 경우 : 화면의 내용을 지운 후, 입장 메시지를 출력하여 사용자가 현재 방의 위치를 알 수 있도록 했다. clear명령을 위해 입력한 ‘clear’ 문자열은 상대방에게 전달되지 않고, 대화 내용이 저장되는 텍스트 파일에 저장되지 않는다.
(4) 프로그램의 종료
ctrl + $ 를 입력한 경우
2) 추가 요구 사항
(1) 공통사항
1개의 서버와 2명의 클라이언트(kim, song)를 가정한다. 시그널을 보내면, 다음과 같은 기능 선택화면이 뜬다. 원하는 옵션의 번호를 입력하면 해당 기능을 수행할 수 있다.
(2) 채팅방 목록 확인
현재 생성되어 있는 채팅방의 목록을 출력하는 기능이다. 본인이 참여하고 있는 채팅방을 포함한, 모든 채팅방의 이름이 나열된다. 각 채팅방 이름 옆에는 참여 인원이 표시된다.
(3) 채팅방 생성/이동
기본 요구 사항에서와 동일하게 동작한다.
(4) 파일 올리기
우선, 내 폴더의 저장된 파일들을 나열하여 보여준다. 이 중 업로드를 희망하는 파일명을 입력한다. 입력값이 실제 폴더 내에 있는 파일명과 같다면, 해당 파일은 채팅방의 공유 폴더로 복사, 저장된다. 이름 뿐만 아니라 권한도 동일하게 복사된다.
(5) 파일 내려받기
우선, 채팅방의 공유 폴더에 저장된 파일명을 나열하여 보여준다. 파일 올리기 이후 수행되었음을 가정하면, 공유 폴더에는 다른 클라이언트가 이미 업로드 한 파일이 저장되어 있다. 다운로드를 원하는 파일명을 입력하면, 해당 파일이 내 폴더에 복사, 저장된다. 마찬가지로 이름뿐 아니라 권한까지 복사된다. “6. 내 파일목록” 기능을 수행하면, 다운로드가 성공함을 알 수 있다.
(6) 내 파일 목록
내 폴더(클라이언트 개인 폴더) 내의 저장된 파일목록을 출력한다.
(7) 채팅 내용 검색
대화 내용 저장 텍스트 파일 : 채팅방의 공유 폴더 안에 대화 내용이 저장되는 텍스트 파일이 저장된다. 대화가 진행될 때마다 업데이트된다.
‘시간 검색’을 선택한 경우 : 1번을 선택하면 시간을 기준으로 검색할 수 있다. 검색을 원하는 시간을 형식에 맞게 입력하면, 해당 시간 이후의 모든 채팅이 출력된다.
‘단어 검색’을 선택한 경우 : 2 번을 선택하면 단어를 기준으로 검색할 수 있다. 검색을 원하는 단어를 입력하면, 해당 단어가 포함된 문장이 출력된다.
(8) 채팅 프로그램 영어 ver
컴파일 시 “-a” 옵션을 함께 적용하여 컴파일하면, 프로그램의 안내문은 모두 영어로 번역되어 출력된다. 언어가 바뀐 점 이외의 모든 것은 기존과 동일하다.
3) 예외 처리 사항
(1) 프로그램의 실행 도중, 정상정인 입력값이 아닐 경우에 대한 해결 방안을 보여준다.
(2) 사용할 닉네임이 겹칠 경우 : 클라이언트는 채팅방에 입장하면, 닉네임을 개인 폴더의 이름으로 한 폴더가 생성된다. 만약 닉네임이 겹친다면, 개인 폴더의 이름이 겹칠 우려가 있으므로, 중복되는 닉네임을 입력할 시, 인덱스 번호를 추가하여 개인 폴더를 생성한다.
(3) 채팅방의 개설 또는 이동에서, 잘못된 옵션을 입력할 경우 : 옵션을 다시 입력하라는 메시지가 출력된다.
(4) 채팅방의 이름이 겹칠 경우 : 채팅방 이름이 이미 존재한다는 메시지와 함께, 재입력을 요구한다.
(5) 추가 기능에서, 잘못된 옵션을 입력할 경우 : 잘못된 옵션을 입력하였다는 메시지와 채팅방으로 돌아간다는 메시지를 출력한다.
(6) 파일 올리기 기능에서, 잘못된 파일명을 입력할 경우 : 해당 파일명의 파일이 없다는 메시지와 채팅방으로 돌아간다는 메시지를 출력한다.
(7) 파일 내려받기 기능에서, 잘못된 파일명을 입력할 경우 : 해당 파일명의 파일이 없다는 메시지와 채팅방으로 돌아간다는 메시지를 출력한다.
(8) 채팅 검색 기능에서, 잘못된 문자열을 입력할 경우 : 문자열을 찾지 못했음을 출력한다.
728x90'Project' 카테고리의 다른 글
[인턴] 실시간 화재 예측 시스템(RFMS) 효과성 측정 및 기능 고도화 ISP (0) 2020.09.25 [공모전] 마스크 미착용자 탐지 서비스, KOMO (2020포스트코로나AI챌린지) (0) 2020.05.27 [DEMO] 협업 툴 제작 프로젝트 (0) 2020.05.11 [DEMO] 마스크 미착용자 탐지 AI 카메라 (0) 2020.04.25 [DEMO] Teachable Machines으로 만든 AI 동물상 테스트 (0) 2020.04.24