소켓 통신으로 채팅 서버 구현하기[C, C++] - 3 (클라이언트와 서버 간의 소켓 통신 시작하기)




일단 채팅 서버를 만들 때 가장 먼저 해야 할 일은 서버를 구축하는 일이다. 
서버에서는 다른 프로그램이 같은 포트에 접근할 때 소켓을 통해 정보를 주고받게 된다.
만약 192.168.0.9 주소의 5000포트에서 클라이언트가 소켓을 열고 접속할 서버를 찾고 있다면, 서버는 같은 주소의 같은 포트에 자신의 소켓을 열고 그 두 소켓을 연결해주어야 한다.

이때 한 채팅서버가 다수의 클라이언트와 통신을 동시에 진행해야 하기 때문에, 멀티쓰레드가 필수적인 작업이라고 할 수 있다. 

일단 밑의 캡쳐본은 서버사이드의 main 전문이다:


소켓통신의 베이직에 대해서 설명하진 않겠지만, 알아두어야 할 점은 

소켓 파일디스크립터(sockfd)는 int형이라는 것, 

socket()함수로 init을 해준다는 것,

sockaddr_in 구조체로 서버쪽 주소(serv_addr)를 담을 변수를 만든 다음, 서버쪽 주소와 socket을 바인딩 해주는 것,

그리고 같은 방법으로 클라이언트쪽 주소(cli_addr)를 담을 변수를 만든 다음, 바인딩된 socket으로 들어오는 연결요청을 accept해서 커넥션 정보를 담는다는 것

정도이다.

이외에 특기할 사항은 ThreadPool 방식을 사용해서 각 클라이언트와 서버의 연결을 구분지었다는 것인데, 여기서는 직접 구현하지 않고 제공된 threadPool.h를 사용했다. 전편에 올린 GitHub 링크에 보면 헤더파일이 첨부되어 있다.

여기까지는 저번 과제(기본적인 TCP/IP 서버 구축하기)에서 했던 내용이라 상세히 적진 않았다. 이번 과제에서 본격적으로 작업한 내용은 다음 포스트부터 나오지 않을까.

댓글