채팅 프로그램 - 리눅스 환경 제작

리눅스프로그래밍

  • 리눅스(우분투) 환경에서 동작하는 채팅 프로그램 개발
  • 조건

    • 서버: 여러 클라이언트의 접속을 받아 메시지를 중계하고, 서버 관리자도 직접 채팅에 참여할 수 있어야 함
    • 클라이언트: 각자 ID를 가지고 서버에 접속하며, 다른 클라이언트 및 서버와 실시간으로 메시지를 주고받을 수 있어야 함
  • 서버 구현

    • 클라이언트 관리: 새로운 클라이언트가 접속할 때마다 해당 클라이언트의 소켓 정보를 Linked List에 추가하여 관리
    • 동시성 제어: 여러 클라이언트가 동시에 접속하거나 접속을 끊을 때 공유 자원인 클라이언트 리스트에 안전하게 접근하기 위해 Mutex를 사용하여 스레드 충돌을 방지
    • 비동기 처리
      • 메인 스레드: 새로운 클라이언트의 연결 요청을 계속해서 기다리고 수락
      • 클라이언트 처리 스레드: 클라이언트가 접속할 때마다 이 스레드를 하나씩 생성하여 각 스레드는 담당 클라이언트로부터 메시지가 오는지 독립적으로 기다리고 메시지를 받으면 message함수를 호출하여 다른 모든 클라이언트에게 전달
      • 서버 입력 스레드: 서버 관리자의 키보드 입력을 처리하기 위한 별도의 스레드를 생성하고 이 스레드로 인해 클라이언트 메시지를 처리하는 중에도 서버 관리자가 언제든지 메시지를 입력하고 모든 클라이언트에게 보낼 수 있음
  • 클라이언트 구현

    • ID 입력 및 연결: 프로그램을 시작할 때 사용자 ID를 입력받고 ID를 사용하여 서버에 소켓 연결을 수립
    • 비동기 처리
      • 메인 스레드: 사용자의 키보드 입력을 받아 서버로 메시지를 전송하는 역할
      • 메시지 수신 스레드: 서버에 연결되자마자 이 스레드를 생성하여 메인 스레드와 독립적으로 메시지가 오는지 항상 대기하다 메시지를 받으면 화면에 출력
윤영준
윤영준
전북대학교 컴퓨터인공지능학부

전북대학교 소속 윤영준입니다. AI, 개발, 보안을 학습하며 프로젝트 경험을 키우고 있습니다.