621 단어
3 분
SocketChatServerProject-1회차

개요#

이 프로젝트는 기존에 개념으로만 접했던 멀티 스레딩과 소켓을 직접 제작하며 경험해 봄으로서 실제 사용할 때 어떤 어려운 점이 있는지 어떤 점을 주의해야하는지 등을 배우기 위해서 진행하는 프로젝트입니다.

목표는 디스코드나 카카오톡과 같은 채팅이 가능하고 기록이 저장되며 실시간으로 채팅이 동기화되는 그런 프로그램을 만드는 것입니다.

오늘 한 것#

오늘은 서버와 클라이언트의 헤더 파일에서 클래스를 정의하고 그 아래의 메서드와 멤버 변수를 선언 및 구현하였습니다.

구현한 기능은 기초적인 것으로 클라이언트는 서버와 소켓을 연결하고 데이터를 주고받는 코드를 제작하였습니다.

서버쪽에서는 서버가 실행이 되면 요청을 받는 소켓을 하나 열고 만약 요청이 들어오면 스레드 배열에 스레드를 추가하고 연결된 소켓도 소켓 배열에 추가하는 기능과 스레드에서 메시지를 송수신하는 기능을 기초를 구현하였습니다.

어려웠던 점#

스레드를 스레드 배열에 생성하는 기능을 구현하는 것이 힘들었습니다.

처음에는 스레드를 힙에 생성하고 스레드 포인터 배열에 추가하는 방식으로 구현하려 했었습니다.

하지만 이 방식은 객체를 힙에 생성해서 소멸시킬 위치와 타이밍을 정하기 어려웠습니다.

고민한 결과 혹시해서 멤버 함수를 이용하는 스레드 객체도 emplace_back 메서드를 사용할 수 있는지 찾아보니 멤버 함수 포인터를 이용하면 가능하다 하여 해당 방식으로 스레드 포인터 배열이 아닌 스레드 배열을 이용하여 구현헸습니다.

앞으로 개선할 점#

클라이언트와 서버를 실행한 결과, 클라이언트와 서버를 하나씩 실행하고 메시지를 하나 보냈을 때 두 프로그램이 멈추는 현상이 있어 해당 현상부터 고치고 다른 기능을 구현할 예정입니다.