Tcp 클래스를 이용한 TCP/IP 통신
TCP/IP with tcp class
Tcp 클래스를 이용한 TCP/IP 통신
앞서 우리는
Socket
클래스를 직접 사용해 TCP 서버/클라이언트를 구현해봤습니다.
이번에는 .NET 에서 제공하는 더 간단한 추상화 클래스인TcpClient
와TcpListener
를 이용해
같은 기능을 훨씬 쉽게 구현하는 방법을 소개합니다.
TcpClient / TcpListener 란 ?
TcpListener
: 서버에서 클라이언트의 접속을 기다릴 때 사용TcpClient
: 클라이언트가 서버에 접속할 때 사용- 내부적으로
Socket
클래스를 래핑하고 있어서 기본 원리는 같지만 사용법이 더 간단함
1. TCP 서버 코드 (TcpListener)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class TcpServer
{
static void Main()
{
TcpListener server = new TcpListener(IPAddress.Any, 9000);
server.Start();
Console.WriteLine("서버 시작됨. 클라이언트 기다리는 중...");
TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int length = stream.Read(buffer, 0, buffer.Length);
string received = Encoding.UTF8.GetString(buffer, 0, length);
Console.WriteLine("수신: " + received);
string response = "서버 응답: " + received.ToUpper();
byte[] responseData = Encoding.UTF8.GetBytes(response);
stream.Write(responseData, 0, responseData.Length);
stream.Close();
client.Close();
server.Stop();
}
}
2. TCP 클라이언트 코드 (TcpClient)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Net.Sockets;
using System.Text;
class TcpClientTest
{
static void Main()
{
TcpClient client = new TcpClient("127.0.0.1", 9000);
NetworkStream stream = client.GetStream();
string message = "안녕하세요 서버!";
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
byte[] buffer = new byte[1024];
int length = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, length);
Console.WriteLine("서버 응답: " + response);
stream.Close();
client.Close();
}
}
차이점 요약 (Socket vs Tcp)
항목 | Socket 클래스 | TcpClient / TcpListener |
---|---|---|
난이도 | 높음 | 낮음(입문자용) |
코드량 | 많음 | 적음 |
유연성 | 매우 높음 | 기본 기능만 제공 |
프로토콜 | TCP / UDP 가능 | TCP 전용 |
사용목적 | 복잡한 서버 구현 | 간단한 통신 구현 |
주의할 점
TcpClient.GetStream()
을 통해 얻은NetworkStream
으로 통신함- 통신 후에는 반드시
stream.Close()
,client.Close()
해야 포트가 정리됨 - 데이터를 보내기 전에 서버가 반드시 먼저 실행되어 있어야 함
정리
TcpClient
/TcpListener
는 TCP 통신을 가장 간단하게 구현할 수 있는 방법입니다.- 내부적으로는 여전히
Socket
을 사용하지만, 불필요한 세부 구현을 숨겨서 코드가 훨씬 짧고 직관적입니다. - UI, 콘솔, 서비스 등 다양한 환경에서 빠르게 구현하고자 할 때 매우 유용합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.