일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- MVVM
- 파이어베이스
- 깃허브
- Binding
- GitHub
- typescript
- 바인딩
- 닷넷
- spring boot
- MS-SQL
- db
- HTML
- MSSQL
- 리엑트
- Firebase
- 플러터
- React JS
- Flutter
- JavaScript
- Maui
- 함수
- 마우이
- AnimationController
- .NET
- 자바스크립트
- 애니메이션
- listview
- 오류
- page
- Animation
Archives
- Today
- Total
개발노트
12. [ASP .NET Core] TcpClient (Winform 으로 클라 만들기) 본문
반응형
WinForm을 이용한 TCP 클라이언트 애플리케이션 만들기
TCP 클라이언트를 이용한 통신은 다양한 네트워크 애플리케이션에서 중요한 역할을 합니다. 이번 글에서는 WinForm을 이용하여 TCP 클라이언트 애플리케이션을 만드는 방법을 다뤄보겠습니다. 이 애플리케이션은 서버와 연결하고 데이터를 송수신하는 기능을 제공합니다.
애플리케이션 개요
이 애플리케이션은 TCP 클라이언트로, 사용자가 버튼을 클릭하여 서버에 연결하고, 데이터를 보내고 받는 기능을 수행합니다. 요청 데이터는 단순 문자열로 서버에 전송되며, 서버로부터 응답을 받으면 그 내용을 화면에 표시합니다.
UI 구성
- 연결 버튼 (btn_open): 서버와의 연결을 시작합니다.
- 종료 버튼 (btn_close): 서버와의 연결을 종료합니다.
- 요청 버튼 (btn_request): 서버로 데이터를 전송하고, 응답을 받습니다.
- 응답 텍스트 박스 (txt_response): 서버의 응답 메시지를 표시합니다.
기능 설명
1. 서버에 연결
클라이언트는 버튼을 클릭하여 서버에 연결할 수 있습니다. 연결할 서버의 IP 주소와 포트 번호는 미리 설정되어 있으며, 이 예제에서는 127.0.0.1:2222로 설정했습니다.
서버와 연결되면 NetworkStream을 통해 데이터를 송수신할 수 있는 준비가 완료됩니다.
public partial class frm_tcpClient : Form
{
private TcpClient tcpClient;
private NetworkStream stream;
public frm_tcpClient()
{
InitializeComponent();
}
// 서버와 연결하는 버튼 클릭 이벤트
private async void btn_open_Click(object sender, EventArgs e)
{
try
{
// TCP 클라이언트 생성
tcpClient = new TcpClient();
// 서버와 연결 (127.0.0.1:2222로 설정)
await tcpClient.ConnectAsync(IPAddress.Parse("127.0.0.1"), 2222);
stream = tcpClient.GetStream();
if (stream == null)
{
txt_response.Text = "서버 연결 실패";
return;
}
txt_response.Text = "서버에 연결됨" + stream.ToString();
}
catch (Exception ex)
{
MessageBox.Show($"연결 실패: {ex.Message}");
}
}
// 서버 연결 종료하는 버튼 클릭 이벤트
private void btn_close_Click(object sender, EventArgs e)
{
if (tcpClient != null && tcpClient.Connected)
{
stream?.Close();
tcpClient.Close();
txt_response.Text = "연결 종료됨";
}
}
// 서버로 요청을 보내고 응답을 받는 버튼 클릭 이벤트
private async void btn_request_Click(object sender, EventArgs e)
{
if (tcpClient == null || !tcpClient.Connected)
{
MessageBox.Show("먼저 서버에 연결하세요.");
return;
}
try
{
// 보내는 데이터 (단순 문자열 전송)
string requestData = "Hello, Server!";
byte[] requestBytes = Encoding.UTF8.GetBytes(requestData);
// 서버로 요청 전송
await stream.WriteAsync(requestBytes, 0, requestBytes.Length);
await stream.FlushAsync();
// 서버 응답 수신
byte[] buffer = new byte[1024];
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
txt_response.Text = $"서버 응답: {response}";
}
else
{
txt_response.Text = "서버 응답 없음";
}
}
catch (Exception ex)
{
MessageBox.Show($"오류 발생: {ex.Message}");
txt_response.Text = "통신 중 오류 발생";
}
}
}
서버와 연결하는 메서드 (btn_open_Click)
- 목적: 클라이언트가 서버에 연결하는 기능을 담당합니다.
- 설명:
- TcpClient 객체를 생성합니다. 이 객체는 클라이언트와 서버 간의 연결을 관리합니다.
- ConnectAsync 메서드를 호출하여 비동기적으로 서버에 연결합니다. 여기서는 127.0.0.1:2222로 연결을 시도합니다. IPAddress.Parse("127.0.0.1")는 로컬 호스트(IP 주소)를 지정하고, 2222는 포트를 지정합니다.
- 연결이 성공하면 GetStream 메서드를 통해 네트워크 스트림을 얻습니다. 이 스트림을 통해 서버와 데이터를 주고받을 수 있습니다.
- 연결이 실패하면 예외를 처리하여 "연결 실패" 메시지를 출력합니다. 연결이 성공하면 "서버에 연결됨" 메시지를 출력합니다.
서버 연결 종료하는 메서드 (btn_close_Click)
- 목적: 서버와의 연결을 종료하는 기능을 담당합니다.
- 설명:
- 연결이 이루어진 상태에서 연결 종료 버튼을 클릭하면 호출됩니다.
- tcpClient.Connected로 연결 상태를 확인하고, 연결된 상태라면 stream.Close()와 tcpClient.Close() 메서드를 호출하여 연결을 종료합니다.
- 연결 종료 후 "연결 종료됨" 메시지가 표시됩니다.
서버로 요청 보내기 및 응답 받기 (btn_request_Click)
- 목적: 서버에 요청을 보내고 응답을 받는 기능을 담당합니다.
- 설명:
- 이 메서드는 서버와의 연결이 확인된 상태에서 호출됩니다.
- 요청 데이터는 "Hello, Server!"라는 간단한 문자열로 준비되어 있습니다. 이 문자열을 UTF-8로 인코딩하여 바이트 배열로 변환한 후 서버로 전송합니다.
- WriteAsync 메서드를 사용하여 서버로 데이터를 비동기적으로 전송하고, FlushAsync 메서드로 전송된 데이터를 플러시하여 보냅니다.
- 그 후, 서버로부터 응답을 ReadAsync 로 비동기적으로 받습니다. 응답은 바이트 배열로 읽어오고, 이를 다시 문자열로 변환하여 화면에 출력합니다.
- 응답이 없다면 "서버 응답 없음" 메시지가 표시됩니다.
- 만약 통신 중 오류가 발생하면 오류 메시지를 출력합니다.
반응형
'서버 개발 > ASP .NET Core' 카테고리의 다른 글
11. [ASP .NET Core] TCP Server 만들기 (백그라운드 서비스, DI로 자동 주입) (0) | 2025.03.28 |
---|---|
10. [ASP .NET Core] Json으로 객체 직렬화 시, 빈 값으로 매핑되는 문제 (0) | 2025.03.25 |
9. [ASP .NET Core] 닷넷에서 웹 파일로 띄우기 (0) | 2025.03.25 |
8. [ASP .NET Core] 누겟말고 소스 (0) | 2025.02.19 |
7. [ASP .NET Core] HttpClient 올바르게 사용하기 (0) | 2025.02.03 |
Comments