소켓 프로그래밍 개요
네트워크 통신에서 소켓은 프로세스 간 통신을 구현하는 핵심 기술입니다. TCP/IP 프로토콜을 기반으로 한 소켓 프로그래밍은 다음과 같은 단계로 진행됩니다:
- 로컬 IP 주소와 포트 확인
- 통신 프로토콜 선택(TCP/UDP)
- 소켓 객체 생성
- IP 주소와 포트 바인딩
- TCP: Listen()으로 연결 대기 / UDP: 직접 데이터 수신
- TCP: Accept()로 연결 수락 후 Send/Receive 사용
- 통신 종료 시 리소스 해제
주요 클래스 및 메서드
소켓 생성
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 특성 비교
| TCP | UDP |
|---|---|
|
|
채팅 애플리케이션 구현 핵심
서버 초기화
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);
}
}