Tcp 서버를 만들어보자

Nameless·2022년 12월 12일
0

NetworkProgramming

목록 보기
2/2

C#을 이용한 간단한 TCP서버를 만들어보자!

먼저 서버를 제작 해 봅시다.

class TestServer
    {
        static void Main(string[] args)
        {
            // 리스닝 할 리슨 소켓을 만들어준다!
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
            // 7777부분에는 포트를 넣어주면 된다
            listenSocket.Bind(new IPEndPoint(IPAddress.Any, 7777));
            listenSocket.Listen();
            while (true)
            {
                var client = listenSocket.Accept();
                byte[] recvBuffer = new byte[1024];
                ReadOnlySpan<byte> readonlySpan = new ReadOnlySpan<byte>(recvBuffer);
                Console.WriteLine("Client Connect !");
                while(true)
                {
                    int recvLen = client.Receive(recvBuffer, SocketFlags.None);
                    string msg = Encoding.UTF8.GetString(readonlySpan.Slice(0, recvLen));
                    Console.WriteLine("RecvLen : " + recvLen);
                    Console.WriteLine("RecvData : " + msg);
                    Array.Clear(recvBuffer, 0, recvLen);
                    if(recvLen <=0)
                   {
                   		// 클라이언트의 접속이 끊기거나 문제가 있는 상황
                        break;
                   }
                }
                client.Close();
            }
            listenSocket.Close();
        }
    }

순서
1. 리스닝할 소켓을 만들어준다.
2. 리스닝소켓에 IP와 포트를 바인딩 해준다.(Bind)
3. 리스닝소켓의 Listen함수를 실행하여 리스닝을 하게 한다.(Listen)
4. 클라이언트의 접속을 기다린다.(Accept)
5. 클라이언트가 접속이 완료되면 클라이언트에게서 데이터가 전송되기를 기다린다(Recv)

간단한 테스트 방법

먼저 서버를 실행 후
명령 프롬프트를 실행해준다
명령 프롬프트에서 telnet 127.0.0.1 7777을 입력하고 엔터를 누른다.
"127.0.0.1" 은 로컬호스트 주소이고, 7777 부분에는 자기가 입력한 포트번호를 넣어주면 된다.
엔터를 누르면 서버에 클라이언트가 커넥트가 되었다고 뜰 것이다.

명령프롬프트 쪽에서 아무키나 누르면 서버쪽으로 데이터가 보내지고
서버쪽은 데이터를 받았으므로 RecvLen과 RecvData를 출력해준다.

마치면서

위 방식은 간단하게 동기 방식으로 구현되어 있습니다.
동기 방식은 요청이 오기전까진 아무것도 못하고 계속 기다리는 단점이 있습니다.
관심이 있으신 분 들은 비동기 방식도 한 번 찾아보시면 좋습니다!

profile
No Pain Yes Gain

0개의 댓글