728x90

"TCPClient 클라이언트 1단계" 구현 목표


C# 콘솔 프로젝트 생성하기

 

외부 프로젝트 솔루션에 추가하기

 

프로젝트에 클래스 파일 추가하기

 

클라이언트 로직 구현하기

더보기
// [A] 클라이언트에서, 서버 접속에 필요한 데이터를 준비합니다.(Private 필드, 맴버 변수)
private IPAddress? _serverIPAddress = IPAddress.Parse("127.0.0.1");  //서버IP
private int _serverPort;              //서버Port
private TcpClient? _client;           //클라Socket

 

 

// [B] getter 구현 (외부에서 변경 불가, 내부 메서드를 통해서만 변경)
// (동일) // public IPAddress? ServerIPAddress { get { return _serverIPAddress; } }
public IPAddress? ServerIPAddress => _serverIPAddress;
public int ServerPort => _serverPort;
public TcpClient? Client => _client;

 

// [C] setter 구현 (IP 검증 및 설정)
public bool SetServerIPAddress(string addressStr)
{
    if (!IPAddress.TryParse(addressStr, out var parsed))
    {
        Console.WriteLine(" - 잘못된 서버 IP입니다.");
        return false;
    }

    _serverIPAddress = parsed;
    return true;
}

 

// [D] setter 구현 (포트 번호 검증 및 설정 메서드)
public bool SetServerPort(string portStr)
{
    int portNum;
    if (!int.TryParse(portStr, out portNum) || portNum <= 0 || portNum > 65535)
    {
        Console.WriteLine(" - 잘못된 Port입니다. (유효 범위: 1~65535)");
        return false;
    }
    _serverPort = portNum;
    return true;
}

 

 

// [E] 서버 접속 메서드
public async Task ConnectToServerAsync()
{
    // [E.1] 서버가 연결되어 있지 않으면, 
    if (_client == null) _client = new TcpClient();

    try
    {   // [E.2] 검증한 IP, Port 를 기반으로 서버 연결 시도
        await _client.ConnectAsync(_serverIPAddress, _serverPort);
        Console.WriteLine(string.Format("서버 접속 IP/Port: {0}/{1}", _serverIPAddress, _serverPort));
    }
    catch (Exception ex)
    {   // [E.3] 예외 발생시 상태 출력
        Console.WriteLine(ex.ToString());
        throw;
    }
}

 

내 프로젝트에 참조하기

 

콘솔 클라이언트 구현

더보기
// [A] TCPSocketClient 인스턴스 생성
TCPSocketClient client = new TCPSocketClient();

 

 

// [B] 사용자로부터 서버 IP 주소와 포트 번호 입력 받고, 설정
Console.WriteLine("*** 소켓 클라이언트 예제 ***");

Console.Write("서버 IP를 입력하세요: ");
string strIPAddress = (Console.ReadLine() ?? "").Trim();

Console.Write("포트 번호(1~65535)를 입력하세요: ");
string strPortInput = (Console.ReadLine() ?? "").Trim();

 

 

// [C] IP 또는 Port가 잘못된 경우
if (!client.SetServerIPAddress(strIPAddress) || !client.SetServerPort(strPortInput))
{
    Console.WriteLine($" - 잘못된 IP 또는 포트 (IP: {strIPAddress}, Port: {strPortInput})");
    Console.WriteLine("아무 키나 누르면 종료합니다...");
    Console.ReadKey();
    return;
}

 

 

// [D] 서버에 비동기 접속 시도
_ = client.ConnectToServerAsync();

 

 

// [E] 사용자 입력 대기
string? userInput = null;
Console.WriteLine("메시지를 입력하세요. (종료하려면 <EXIT> 입력 후 Enter)");
do
{
    userInput = Console.ReadLine() ?? string.Empty;
} while (userInput != "<EXIT>");

Console.WriteLine("클라이언트 프로그램을 종료합니다.");

 

실행 테스트