[리눅스] 채팅창 구현(서버, 다중 클라이언트)
- 최초 등록일
- 2018.05.01
- 최종 저작일
- 2017.11
- 13페이지/ 한컴오피스
- 가격 2,000원
목차
01 코드(서버, 클라이언트)
02 접속 방법
03 실습결과
04 고찰사항
본문내용
01. 코드
서버
채팅 서버는 클라이언트가 채팅에 참가하면 채팅 참가리스트에 추가하고, 채팅에 참가하고 있는 다른 클라이언트가 보내는 메시지를 다시 다른 채팅 참가자에게 보내는 역할을 한다. 즉, 하나의 프로세스가 여러 클라이언트와의 통신을 담당한다.
클라이언트의 요청을 받아들이기 위해 이번에는 fork()를 사용하는 게 아니고 fd_set 구조체를 이용한 select()함수를 사용하였다.
1~9 : printf, file, socket, error 등 각각 필요한 헤더 파일을 포함시킨다.
11~25 : 매크로 함수를 사용한 정의 구문. listen()함수에 쓰일 백로그와 사용자의 아이디와
로그인을 성공했을 때와 실패했을 때의 아이디, BufferSize를 정의한다.
23열은 최대 소켓 수이고 여기서는 2개의 소켓만 쓰일 예정이다.
25열은 채팅방을 나갈 때 입력받는 문자열을 정의해 두었다.
28 : 현재 소켓 번호 중 가장 큰 값을 구하기 위한 함수 설정
30 : 채팅에 참가한 소켓번호 목록이다.
31 : 채팅 참가자의 수를 판별하며 0으로 초기화한다.
35 : 처음에 화면을 clear 시킨다.
37~47 : 각종 변수 선언. (소켓, id, pw, 메시지를 받은 버퍼 등등)
49 : 읽기상태 변화를 감지할 소켓을 지정한다.
50 : 최대 소켓 번호 크기 + 1
53~57 : 처음에 실행할 때 사용법이 틀리면 사용법을 알려주기 위한 조건문이다.
(이하 소켓 생성부터는 project1 과제와 같다.)
이때 PF_INET은 프로토콜 체계이고 AF_INET은 주소 체계이므로 소켓을 생성할 때는 PF_INET을 사용하고 struct sockaddr_in 구조체에 주소 체계를 넣을 때는 AF_INET을 사용하는 것이 바람직하다.
81 : maxfdp1은 최대소켓 번호 크기 + 1 이므로 sockfd에 1을 더해준다.
90 : read_fds의 모든 소켓을 0으로 초기화한다.
91 : 초기소켓을 선택한다.
참고 자료
http://jkkang.net/unix/netprg/chap4/net4_2.html
https://blog.naver.com/ifkiller/70081338273
https://blog.naver.com/sharonichoya/220501242693
http://jkkang.net/unix/netprg/chap4/net4_3.html