본문 바로가기
C#

[C#] TCP Listener을 이용한 비동기

by Jcoder 2020. 12. 4.

C# 5.0 + .NetFramework 4.5에서 기존 Socket이 아닌 TcpClient의 NetworkStream 타입에 async/await 메서드가 추가되었다.

 

[C#] TCP Socket을 이용한 통신 (tistory.com)

 

[C#] TCP Socket을 이용한 통신

TCP 참고 : TCP - 나무위키 (namu.wiki) TCP - 나무위키 TCP는 전화를 거는 것처럼 상대와 연결을 설정하고 통신을 시작한다. 절차는 아래와 같다. Three Way Handshake 1) 상대에게 통신을 하고 싶다는 메시지

jcoder1.tistory.com

위 방법을 비동기로 바꿔본다.

 

참고 MSDN : TcpListener 클래스 (System.Net.Sockets) | Microsoft Docs

 

TcpListener 클래스 (System.Net.Sockets)

TCP 네트워크 클라이언트에서 연결을 수신합니다.Listens for connections from TCP network clients.

docs.microsoft.com

비동기 TcpListener

 

 

class Program

{      

    static void Main(string[] args)

    {

        Console.WriteLine("Tcp Listener Server");

 

        TcpListener tcpListener = new TcpListener(IPAddress.Any, 9999);

        tcpListener.Start();

 

        while (true)

        {

            var client = tcpListener.AcceptTcpClient();

            PrograssTcpClient(client);

        }

    }

 

    private static async void PrograssTcpClient(TcpClient tcpClient)

    {

        using (NetworkStream ns = tcpClient.GetStream())

        {

            byte[] buffer = new byte[1024];

            int nRecv = await ns.ReadAsync(buffer, 0, buffer.Length);

 

            string text = Encoding.UTF8.GetString(buffer, 0, nRecv);

            Console.WriteLine(text);

            byte[] sendBuffer = Encoding.UTF8.GetBytes("Hello: " + text);

            await ns.WriteAsync(sendBuffer, 0, sendBuffer.Length);

            ns.Close();

        }

    }

}