==================================Outline====================================
Select 함수를 사용한 채팅프로그램
- 초과 접속자 발생 시 차단
- ctrl + d 입력 시 정상종료
- 포트 설정
- ctrl + c 정상종료
----------------------------------------------------------------------------
초과 접속자 발생 시 차단
지난 시간에 이어...
접속자 제한을 3으로 하자. 서버에 접속자가 초과 된 상황을 만들기 위한 작업이다.
** 코딩내용을 수정할 때 우선 코딩의 전체 흐름을 살펴본다.
수정한 코드가 전체 프로그램에 미치는 영향을 파악한 후 작업을 진행해야 한다.
눈에 실핏줄 터지기 싫으면...
smartsock.h에서 MAX_USER 값을 30에서 3으로 줄인다.
접속 제한 숫자를 초과하는 클라이언트의 접속을 막아야 한다. 하지만 영문도 모르고 접속이 안되는 접속자의 속상함 방지를 위해, 일단 접속은 허가한 후 넌 팅길거라는 메시지를 보내준다. 초과 접속작의 접속 처리를 위해 접속자의 대화 소켓을 담는 icSock변수를 icSock[MAX_USER+1]로 처리해준다.
accept후 조건문을 만들어 uiUser의 크기가 MAX_USER가 크거나 같을 때 사용자의 접속을 끊고 안내 메시지(꺼져)를 보내준다.
컴파일 후 클라이언트를 접속시키면 서버와 제한 숫자 내 클라이언트는 정상 작동하지만, 초과 접속한 클라이언트에게 무한반복으로 버퍼에 있는 메시지가 출력된다. 초과인원이 출입 시 동작하는 if문으로 간다. 초과 접속된 클라이언트에게 종료 메시지를 보내주고 클라이언트에서는 해당 메시지를 받으면 접속이 끊어지도록 코딩하자.
<server.c>
<client.c>
** 캡쳐된 코드 소속이 궁금할 때 구분법: iFd쓰면 client, icSock/iSock쓰면 server
ctrl + d 입력 시 정상종료
서버에서 Ctrl + D를 누르면 모든 클라이언트에게 종료 메시지를 출력하고 서버를 종료하도록 처리해주자.
<client.c>
포트 설정
PORT를 세련되게 고쳐 주자.
우선 실행파일이 인자를 받을 수 있도록 메인함수를 고쳐준다. 서버부터.
실행 시 포트번호를 인자로 받게 되고 이것이 유효한 숫자일 경우 포트번호를 변경해준다.
bind를 위해 접속정보를 세팅하는 구조체로 가서 PORT번호를 수정해준다.
클라이언트에서도 똑같이 작업해준다.
ctrl + c 정상종료
서버나 클라이언트에서 정상종료가 아닌 ctrl+c를 눌렀을 경우에도 클라이언트가 고통 받지 않고 정상종료 하도록 코딩해주자.
ctrl+c로 눌렀을 경우, 대화소켓으로 받은 read의 반환 값은 0이 된다. 이를 활용하여 read값이 0일 경우 정상종료 시켜주자.
<server.c>
<client.c>
채팅 서버, 클라이언트 만들기는 여기서 끝낸다. 지금까지 코딩한 채팅 프로그램이 성에 안차면 멀티룸 채팅에 도전해 보시씨요.
** 멀티룸 채팅 : 채팅 방을 여러 개 만들어서 유저가 선택적으로 접속
/*** 소스 ***/
#include "smartsock.h" |
<client.c>
#include "smartsock.h" |
<server.c>
#ifndef __SMARTSOCK_H__ |
<smartsock.h>
/*** 파일 ***/
'Busan IT > 공장내 Network' 카테고리의 다른 글
select함수를 사용한 채팅 서버/클라이언트 (0) | 2015.08.26 |
---|---|
Select함수를 사용한 채팅 서버 (0) | 2015.08.26 |
select함수를 사용한 채팅 프로그램 (0) | 2015.08.24 |
select 함수, select함수를 사용한 채팅프로그램 작성 (0) | 2015.08.18 |
Hacker School level 1, VMware 해커스쿨 서버 설치 (0) | 2015.08.13 |