일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c# 강의
- ssh log
- MS-SQL
- OPC
- MSSQL
- Gradle 빌드 오류
- SCM
- Jar 경로
- ssh 접속 실패 로그
- Gradle JDK Path
- CPU 사용량
- lock
- springboot Gradle
- OPC UA Client Write
- OPC DA
- delete truncate 차이
- kafka
- ssh 접속 로그
- mssql table 용량
- JOIN DBMS별 차이점
- table용량
- 스마트공장
- c#
- kafka listener
- Gradle Jar
- OPC UA
- OPC Write
- Java 버전 여러개 사용
- Xamarin
- OPC UA Write
- Today
- Total
IT’s Ha
[C#] Echo Server(에코서버) 본문
안녕하세요.
오늘은 C#을 가지고 에코서버를 구현해보도록 하겠습니다.
에코서버는 네트워크 서비의 일종으로, 수신한 데이터를 그대로 되돌려주는 기능을 가지고 있습니다. 이는 주로 네트워크 통신의 테스트와 디버깅을 위해 사용합니다. 수신한 메세지를 그대로 보내주기만 합니다.
작성 도구는 Visual Studio 2022를 사용하였고, .Net 7.0을 사용하였습니다. 참고하여 주시길 바랍니다.
위와 같이 전송한 데이터를 그대로 되돌려 줍니다.
1. 새 프로젝트 만들기
먼저, 콘솔 앱 프로젝트를 생성합니다.
2. 새 프로젝트 구성
저는 프로젝트 서버를 먼저 구성하기 위해 프로젝트 명에는 EchoServer 그리고 솔루션명에는 EchoExample로 작성하였습니다.
3.추가 정보
저는 .NET 7.0 으로 셋팅하였습니다. 버전은 크게 무관합니다.
4. 새 프로젝트 추가
Echo Client 를 생성하기 위해 새 프로젝트를 추가하겠습니다. 프로젝트 구성과 추가정보는 생략하겠습니다.
5.프로젝트 구성
위와 같이 따라하게 되면 프로젝트는 EchoSever와 EchoClient 두개가 생깁니다.
6. 코드 작성
1) EchoServer - Program.cs
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace EchoServer
{
class Program
{
static void Main(string[] args)
{
TcpListener server = null;
try
{
// 13000 포트 선언
Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
// 서버 생성
server = new TcpListener(localAddr, port);
// 서버 시작
server.Start();
// 수신 데이터 선언
Byte[] bytes = new Byte[256];
String data = null;
// 반복대기
while (true)
{
Console.Write("Waiting for a connection... ");
// 클라이언트 연결
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!");
data = null;
NetworkStream stream = client.GetStream();
int i;
// 받은데이터 전송
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
// 데이터 읽기
data = Encoding.UTF8.GetString(bytes, 0, i);
Console.WriteLine("Received: {0}", data);
// 수신 데이터 재전송
byte[] msg = Encoding.UTF8.GetBytes(data);
stream.Write(msg, 0, msg.Length);
Console.WriteLine("Sent: {0}", data);
}
// 종료 커넥션 종료
client.Close();
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
// 서버 중지
server.Stop();
}
}
}
}
2) EchoClient - Program.cs
using System;
using System.Net.Sockets;
using System.Text;
namespace EchoClient
{
class Program
{
static void Main(string[] args)
{
try
{
// localhost ,13000 통신 연결 요청
Int32 port = 13000;
TcpClient client = new TcpClient("127.0.0.1", port);
// 입장시 Hello 전달
Byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello");
NetworkStream stream = client.GetStream();
// 서버로 전송
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent: {0}", "Hello World");
// 수신 데이터 선언
data = new Byte[256];
// 수신 데이터 스트링 선언
string responseData = string.Empty;
// 수신된 데이터 스트링으로 변환
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.UTF8.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);
while (true)
{
Console.WriteLine("전송할 메시지를 입력하세요 (q to quit)");
string readline = "";
readline = Console.ReadLine();
if (readline == "" || readline == "q")
break;
data = System.Text.Encoding.UTF8.GetBytes(readline);
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent: {0}", readline);
bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.UTF8.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);
}
//연결 종료
stream.Close();
client.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
}
}
}
7. 솔루션 설정
솔루션 우클릭 후 속성페이지에서 위와 같이 설정해주세요. 위 작업은 서버와 클라이언트 동시에 실행하기 위해 사용됩니다.
8. 결과
1) EchoSever
2) EchoClient
위와 같이 데이터를 전송시 데이터가 리턴 되는걸 확인 하실 수 있습니다.
C#으로 에코서버 구성 샘플구현이였습니다. 감사합니다.
'.NET > C#' 카테고리의 다른 글
[C#] Byte Array 0값 제거, Byte Array에 값 추가 (0) | 2023.03.23 |
---|---|
[C#] Datetime 차이 구하기, Null 설정 (0) | 2023.03.09 |
[C#] TCP 소켓 전송 (0) | 2023.02.09 |