멀티 쓰레드 기반의 채팅 프로그램 이름 문성영 이름 김현진 학번 2010151035 이름 장용하 이름 차희진 분석설계서
차 례 1 2 3 4 5 6 7 8 9 연 구 개 요 시스템 구성도 기능 분석 기능 설계도 시험절차서 업 무 분담 차 례 1 연 구 개 요 2 시스템 구성도 3 기능 분석 4 기능 설계도 5 시험절차서 6 업 무 분담 7 문제점 및 해결방안 8 수행일정 9 필요기술 및 참고문헌
네트워크 프로그래밍을 이해하고 응용력을 높임 1. 연구 개요 수업시간에 학습한 내용을 바탕으로 네트워크 프로그래밍을 이해하고 응용력을 높임 멀티쓰레드를 이해하고 구현함에 있어 문제점을 파악하고 보완함 C언어를 바탕으로 유닉스 환경에서 채팅 및 파일전송을 구현
2. 시스템 구성도 Server 데 데 이 이 터 터 전송 수신 TCP소켓 이용 1.클라이언트 소켓 번호 2.클라이언트 소켓개수 3.클라이언트 ID Server 데 이 터 전송 데 이 터 수신 TCP소켓 이용
3. 기능 분석 (1) 다중 접속지원 기능 1. 쓰레드 이용 Server : 클라이언트 연결요청이 있을 때마다 클라이언트를 다루기 위한 쓰레드 생성. Client : 서버에 접속시 송신 쓰레드와 수신 쓰레드 생성. (쓰레드는 전역변수를 통해 서로 정보를 주고받을 수 있음) 2. 쓰레드간 Mutex 이용 서버의 어느 한 쓰레드가 서버에 있는 전역변수에 접근할땐 다른 쓰레드의 접근을 막기위해 Mutex 이용.
3. 기능 분석 (2) 채팅 기능 Server : 클라이언트로부터 받은 메시지를 임시적으로 배열에 저장한다. 배열에 저장된 메시지를 모든 클라이언트에게 보냅니다. ( 클라이언트 핸들러 쓰레드의 역할 ) Client : 전달할 메시지를 입력하면 임시적으로 배열에 저장된다. 배열에 저장된 메시지를 서버에 보냅니다.( 송신쓰레드 역할) 서버로부터 오는 메시지를 출력 합니다.( 수신쓰레드 역할)
3. 기능 분석 (3) 파일전송 기능 Client : 파일 보낼 때(송신 쓰레드 역할) 명령어 이용, 파일 전송을 시작함. 명령어 이용, 존재하는 파일의 목록확인 가능. 파일명과 보낼 Client 이름은 명령어와 구분하여 입력. 파일전송 전, 서버에게 파일은 보낸다는 정보를 보냄. 파일은 바이너리 모드로 열고, 읽어온 데이터는 배열에 저장. 배열에 저장된 정보를 서버에 전달.
3. 기능 분석 (4) 파일전송 기능 Client : 파일 받을 때(수신 쓰레드 역할) 서버로부터 파일을 보낸다는 명령을 받음. 받을 파일의 파일명을 직접 입력함. 서버로부터 파일을 입력 받아 배열에 임시 저장함. 파일을 바이너리 쓰기 모드로 열고, 임시 저장된 파일의 내용을 파일에 씀.
3. 기능 분석 (5) 파일전송 기능 Server : 파일을 보낸다는 신호를 클라이언트로부터 받음. 클라이언트에게 받은 파일 데이터를 배열에 임시 저장함. 파일을 보낸다는 신호를 해당 클라이언트에게 보냄. 배열에 저장된 데이터를 해당 클라이언트에게 보냄. 파일을 다 전송했으면, 다 전송했다는 신호를 보냄.
3. 기능 분석 (6) 사용자의 편리를 위한 명령어 제공 기능 Client : (송신 쓰레드 역할) (명령어들 정보가 있는)메뉴 호출을 위한 명령어 파일전송을 위한 명령어 프로그램 종료를 위한 명령어
4. 기능설계도(또는 시나리오) 다중 접속지원 기능 D A T Server client client [mutex_lock] rcv thread D A T snd client thread rcv snd [mutex_lock] [mutex_unlock] [pthread_create] [pthread_detach] [pthread_create] [pthread_detach]
sprintf(“”,"%s %s", name, msg); 4. 기능설계도(또는 시나리오) - BUF_SIZE (통일) - char msg[BUF_SIZE]; 채팅 기능 Server client rcv B u f e r thread B U F R snd B u f e r client scanf() thread rcv B u f e r snd printf() sprintf(“”,"%s %s", name, msg); Write(), Read()
4. 기능설계도(또는 시나리오) 파일송신 기능 Client : 파일 보낼 때(송신 쓰레드 역할) FILE Server - fopen(, “바이너리모드"); - fread() client write(sock, “파일 전송“) rcv thread B U F R snd B u f e r 명령어로 구동 thread FILE write(sock, “파일 전송 신호“) : 서버는 파일 수신준비함
4. 기능설계도(또는 시나리오) 파일수신 기능 Client : 파일 수신할 때(수신 쓰레드 역할) FILE Server write(sock, “파일 전송“) Server - fopen(, “바이너리모드"); - fwrite() client rcv thread B U F R snd B u f e r write(sock, “파일 수신 신호“) : 클라이언트는 파일 수신준비함 thread FILE
4. 기능설계도(또는 시나리오) 사용자의 편리를 위한 명령어 제공 기능 Client : (송신 쓰레드 역할) 명령어 목록 /menu : 명령어 목록을 출력합니다. /sendfile : 파일을 전송합니다. /q : 프로그램을 종료합니다. / … : …… / ………… client rcv snd 명령어 입력
클라이언트들의 정보는 접속시 생성, 종료시 소멸되며 4. 기타 설계에 적용할 몇가지 read(), write() 함수 사용시 보내고 받는 배열의 사이즈는 전부다 통일한다. 채팅할 때, 발신자의 ID와 채팅 내용을 하나의 배열로 통합하여 서버로 보낸다. 클라이언트들의 정보는 접속시 생성, 종료시 소멸되며 서버쪽 쓰레드에서 다루도록 한다.
5. 예비 시험 절차서 명령어 목록이 잘 뜨는지 해당 명령어를 입력해본다. 채팅을 해본다. (채팅 메시지를 서버에 보냄) : 아이디와 메시지가 함께 오는지 확인. 3. 파일전송을 해본다. (타 클라이언트에 실존하는 파일을 보냄) 4. 전송한 파일을 열어본다. (unix의 cat 명령어 사용) : 제대로 파일전송이 되었는지 확인. 5. 종료 명령어가 잘 작동하는지 시험한다.
6. 업 무 분 담 총 감독 및 일정관리 - 문성영 문 서 작 업 - 차희진 자 료 조 사 - 김현진 프로젝트 매니저 6. 업 무 분 담 총 감독 및 일정관리 - 문성영 문 서 작 업 - 차희진 자 료 조 사 - 김현진 프로젝트 매니저 - 장용하 서버 구현 - 김현진 클라이언트 구현 - 문성영, 차희진
read() write() 함수간 실행순서 문제 7. 예상되는 문제점, 해결모색 read() write() 함수간 실행순서 문제 예상된 write() Read() -> fwrite() B u f e r FILE 예상되지않은 write()
8. 수행 일정 현 시점
9. 필요사항 및 참고문헌 Text https://freelec.co.kr/online/lec_chapter.asp?UID=70 윤성우의 열혈 TCP/IP소켓 프로그래밍 유닉스 에서의 TCP 서버 파일입출력 멀티쓰레드 기반의 서버 http://ko.wikipedia.org/wiki 위키백과의 TCP/IP 멀티쓰레드 관련 정보