D-1071


핵심은 SuperSocket2.0으로 해보는 거다. 


1. Visual Studio 2019 v16.10 필요

2. .NET5.0 이필요


위 1, 2 설치 고고.


3. 아래와 같이 콘솔 애플리케이션 (.NET Core)를 만들어야 하는데 아래와 같은 콘솔 애플리케이션이 안나오는 분이 있을 수 있음. 

있다면 그대로 프로젝트 생성하면 됨.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5d7156d20517196ea3940fc9f0eaf067da1953a59ebbf510ff7349600a59ded35bc7799fd822


3.1 없다면 아래와 같이 아래로 스크롤 한 후 "추가 도구 및 기능 설치" 를 통해 해결할 수 있다.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5d7156d20517196ea3940fc9f0eaf067da1953a59ebbf510ff734a6005058580009a799f9d82



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5d7156d20517196ea3940fc9f0eaf067da1953a59ebbf510ff731c67505785d5019b799f08e3


설치 끝났으면 프로젝트 생성할때 

- 콘솔 애플리케이션(.NET Core) 선택

- 프로젝트 명, 위치 설정, 솔루션 이름 설정

- 대상 프레임워크 .NET 5.0  

이렇게 해라.


4. 패키지 관리자 콘솔을 통해 SuperSocket 2.0.0-beta.10 을 설치한다.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5d7156d20517196ea3940fc9f0eaf067da1953a59ebbf510ff7318340255de810e97799f6e73


패키지 관리자 콘솔을 못 열겠다면 



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5d7156d20517196ea3940fc9f0eaf00abd1253a5d2699b2f8a505e6391a56ad259020fe8e25b54


여기에 "패키지 관리자 콘솔" 치고 열면 됨.



5. 이제 문서를 보고 코드를 작성해 보면 끝

잘 안되면 내꺼 복사혀


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Microsoft.Extensions.Hosting;

using Microsoft.Extensions.Logging;

using SuperSocket;

using SuperSocket.ProtoBase;


namespace ConsoleApp1

{

    class Program

    {

        static async Task Main(string[] args)

        {

            var host = SuperSocketHostBuilder.Create<StringPackageInfo, CommandLinePipelineFilter>()

                .ConfigureSuperSocket(options =>

                {

                    options.Name = "Echo Server";

                    options.Listeners = new List<ListenOptions>

                    {

                        new ListenOptions

                        {

                            Ip = "Any",

                            Port = 4040

                        }

                    };

                })

                .UsePackageHandler(async (session, package) =>

                 {

                     var result = 0;


                     switch (package.Key.ToUpper())

                     {

                         case ("ADD"):

                             result = package.Parameters

                                 .Select(p => int.Parse(p))

                                 .Sum();

                             break;


                         case ("SUB"):

                             result = package.Parameters

                                 .Select(p => int.Parse(p))

                                 .Aggregate((x, y) => x - y);

                             break;


                         case ("MULT"):

                             result = package.Parameters

                                 .Select(p => int.Parse(p))

                                 .Aggregate((x, y) => x * y);

                             break;

                     }


                     await session.SendAsync(Encoding.UTF8.GetBytes(result.ToString() + "\r\n"));

                 })

                .ConfigureLogging((hostCtx, loggingBuilder) =>

                {

                    loggingBuilder.AddConsole();

                })

                .Build();


            await host.RunAsync();


        }

    }

}



6. 이제 실행하면 이렇게 나옴.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5d7156d20517196ea3940fc9f0eaf067da1953a59ebbf510ff734d6202578f815bc4799f83dc


7. 이제 Client 로 확인해보자!! telnet 으로



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5d7156d20517196ea3940fc9f0eaf067da1953a59ebbf510ff731c6c01038a855a91799f900f


혹시 telnet 안되면 대충 이런거 보고 따라하자.


"ADD 2 4" 이런 식으로 작성하고 엔터해보자.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5d7156d20517196ea3940fc9f0eaf067da1953a59ebbf510ff734d650103ded15b9a799fdf99



된다.


요까지.