C# 소켓 프로그래밍 핵심 정리

소켓 프로그래밍 개요

네트워크 통신에서 소켓은 프로세스 간 통신을 구현하는 핵심 기술입니다. TCP/IP 프로토콜을 기반으로 한 소켓 프로그래밍은 다음과 같은 단계로 진행됩니다:

  1. 로컬 IP 주소와 포트 확인
  2. 통신 프로토콜 선택(TCP/UDP)
  3. 소켓 객체 생성
  4. IP 주소와 포트 바인딩
  5. TCP: Listen()으로 연결 대기 / UDP: 직접 데이터 수신
  6. TCP: Accept()로 연결 수락 후 Send/Receive 사용
  7. 통신 종료 시 리소스 해제

주요 클래스 및 메서드

소켓 생성

var netSocket = new Socket(
    AddressFamily.InterNetwork, 
    SocketType.Stream, 
    ProtocolType.Tcp
);

엔드포인트 설정

var serverAddress = IPAddress.Parse("192.168.0.10");
var endpoint = new IPEndPoint(serverAddress, 8080);

TCP 클라이언트 예제

var tcpClient = new TcpClient();
tcpClient.Connect("127.0.0.1", 9000);
var stream = tcpClient.GetStream();
byte[] data = Encoding.UTF8.GetBytes("Hello");
stream.Write(data, 0, data.Length);

UDP 통신 예제

var udpClient = new UdpClient();
byte[] msg = Encoding.UTF8.GetBytes("UDP 메시지");
udpClient.Send(msg, msg.Length, "127.0.0.1", 9001);

TCP vs UDP 특성 비교

TCPUDP
  • 연결 지향적
  • 신뢰성 높은 전송
  • 순차적 데이터 전달
  • 흐름 제어 및 오류 복구
  • 비연결형
  • 빠른 전송 속도
  • 데이터 순서 미보장
  • 오류 검출만 제공

채팅 애플리케이션 구현 핵심

서버 초기화

public class ChatServer {
    private Socket _mainSocket;
    
    public void Initialize(string ip, int port) {
        _mainSocket = new Socket(
            AddressFamily.InterNetwork,
            SocketType.Stream,
            ProtocolType.Tcp
        );
        var endpoint = new IPEndPoint(IPAddress.Parse(ip), port);
        _mainSocket.Bind(endpoint);
        _mainSocket.Listen(5);
    }
}

데이터 수신 처리

void ProcessIncomingData() {
    byte[] buffer = new byte[4096];
    while (true) {
        int received = _clientSocket.Receive(buffer);
        string message = Encoding.UTF8.GetString(buffer, 0, received);
        OnMessageReceived?.Invoke(message);
    }
}

메시지 전송

public void TransmitMessage(string content) {
    if (_clientSocket.Connected) {
        byte[] data = Encoding.UTF8.GetBytes(content);
        _clientSocket.Send(data);
    }
}

태그: C# socket tcp UDP TcpClient

6월 18일 16:35에 게시됨