개요

1. 소켓 프로그래밍이란 무엇인가

  1. 소켓의 문자 그대로의 의미
    Socket은 원래 콘센트를 뜻하는 영단어입니다. 콘센트는 양쪽 단말 사이 연결을 만들어 주기 때문에 네트워크 프로그래밍에서는 네트워크 통신용 엔드포인트로 의미가 확장되었습니다.
  2. 소켓 프로그래밍 정의
    TCP / UDP 네트워크 프로토콜을 사용해 여러 호스트 간 데이터 통신을 구현하는 기법입니다.
  3. 쉽게 이해하기
    두 대 이상의 컴퓨터가 서로 데이터를 주고받도록 프로그램을 작성하는 일입니다. 대표적인 예시로 로컬 네트워크 채팅 툴이 있습니다.

비유로 이해하기: 콘센트 = 네트워크 인터페이스, 플러그 = 다른 호스트, 플러그 꽂기 = 네트워크 연결 수립.

개념을 더 잘 익히기 위해 실제 예제를 통해 직접 구현하며 배워보겠습니다.

2. 간단한 채팅 툴 설계 방안

아키텍처 모델: 클라이언트/서버(C/S)
  • 서버(Server)
  1. 로컬 지정 포트에 바인딩하고 네트워크 접속 요청을 계속 수신 대기
  2. 다른 컴퓨터의 연결 시도를 기다림
  3. 클라이언트 접속이 감지되면 통신 통로를 생성
  • 클라이언트(Client)
    서버의 IP 주소와 포트 번호를 기준으로 능동적으로 연결 요청을 보냄
  • 통신 목표: 두 컴퓨터가 실시간으로 문자 메시지를 주고받아 인스턴트 채팅을 구현

작동 흐름

  1. 서버 실행 → 포트 수신 대기 시작
  2. 클라이언트 실행 → 서버 IP와 포트에 연결 시도
  3. 연결이 정상적으로 맺히면 양쪽에서 메시지를 주고받음

아래는 가장 간단한 예제 코드입니다

서버

// 1. TcpListener를 생성해 IP와 포트 감시
TcpListener listener = new TcpListener(IPAddress.Any, 8899);
listener.Start();
// 2. 클라이언트 연결 대기
TcpClient client = await listener.AcceptTcpClientAsync();
// 3. 네트워크 스트림을 얻어 메시지 송수신 처리
NetworkStream stream = client.GetStream();
Code language: JavaScript (javascript)

클라이언트

// 서버 IP와 포트에 연결
TcpClient client = new TcpClient();
await client.ConnectAsync("192.168.1.100",8899);
NetworkStream stream = client.GetStream();Code language: JavaScript (javascript)

개요

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다