첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

▶ TcpListener 클래스 : Pending 메소드를 사용해 신규 연결시 기존 연결 버리기 예제

Listen("192.168.0.1", 5001);

 

728x90

 

▶ TcpListener 클래스 : Pending 메소드를 사용해 신규 연결시 기존 연결 버리기

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

#region 리스닝하기 - Listen(serverIPString, serverPort)

/// <summary>
/// 리스닝하기
/// </summary>
/// <param name="serverIPString">서버 IP 문자열</param>
/// <param name="serverPort">서버 포트</param>
private static void Listen(string serverIPString, int serverPort)
{
    TcpListener tcpListener = null;

    try
    {
        IPAddress serverIPAddress = IPAddress.Parse(serverIPString);

        tcpListener = new TcpListener(serverIPAddress, serverPort);

        tcpListener.Start();

        byte[] bufferByteArray = new byte[256];

        while(true)
        {
            Console.WriteLine("연결을 대기합니다...");

            TcpClient tcpClient = tcpListener.AcceptTcpClient();

            if(tcpClient.Connected)
            {
                Console.WriteLine("클라이언트가 연결되었습니다!");

                NetworkStream stream = tcpClient.GetStream();

                while(true)
                {
                    if(stream.DataAvailable)
                    {
                        int readCount = stream.Read(bufferByteArray, 0, bufferByteArray.Length);

                        string data = Encoding.ASCII.GetString(bufferByteArray, 0, readCount);

                        Console.WriteLine($"데이터를 수신했습니다 : {data}");

                        byte[] responseByteArray  = Encoding.ASCII.GetBytes("\n데이터 수신\n");

                        stream.Write(responseByteArray, 0, responseByteArray.Length);
                    }
                    else
                    {
                        if(!tcpListener.Pending())
                        {
                            continue;
                        }

                        Console.WriteLine("새로운 클라이언트를 발견했습니다.");

                        break;
                    }
                }

                Console.WriteLine("클라이언트를 닫습니다.");

                tcpClient.Close();
            }

            Thread.Sleep(100);
        }
    }
    catch(SocketException exception)
    {
        Console.WriteLine($"소켓 예외 : {exception}");
    }
    finally
    {
        Console.WriteLine("리스닝을 중단합니다.");

        tcpListener?.Stop();
    }
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요