使用Supersocket2.0 实现客户端

  • Post author:
  • Post category:其他


通过Nuget安装Supersocket 2.0

按照官网的例子写的代码。



注意服务端发送数据的时候,要带回车换行符

using SuperSocket.Client;
using SuperSocket.ProtoBase;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft;
using Newtonsoft.Json;
using aa.Common;

namespace aa.Communication
{
    public class TCPSuperSocket
    {
        public static TCPSuperSocket instance;

        public IEasyClient<TextPackageInfo> client1 { get; set; } = new EasyClient<TextPackageInfo>(new LinePipelineFilter()).AsClient();
  
        public static TCPSuperSocket GetInstance()
        {
            if (instance == null)
            {
                instance = new TCPSuperSocket();
            }
            return instance;
        }

        public async void Connect()
        {
            //RunClient();
            Task.Run(() =>
           {
               RunClient();
           });
        }

        private async void RunClient()
        {
            string ClassName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
            string FuncName = System.Reflection.MethodBase.GetCurrentMethod().Name;
            string TCPTestIP = Config.GetInstance().GetConfig("TCPTestIP");
            int TCPTestPort = int.Parse(Config.GetInstance().GetConfig("TCPTestPort"));

  
            if (!await client1.ConnectAsync(new IPEndPoint(IPAddress.Parse(TCPTestIP), TCPTestPort))) 
            {
                App.Log.Warn(" 连接失败!目标地址!");
                Debug.WriteLine($" 连接失败!目标地址!{TCPTestIP} {TCPTestPort}");
                return;
            }; 
            while (true)
            {
                //if(client1.)
                Debug.WriteLine($"{util.GetNow()} -- {client1.LocalEndPoint}");

                var pp = await client1.ReceiveAsync();
                if (pp != null)
                {
                    try
                    {
                        if (pp.Text.Length > 0)
                        {
                            TestCMDJSONModel tcjm = new TestCMDJSONModel();

                            tcjm = JsonConvert.DeserializeObject<TestCMDJSONModel>(pp.Text);
                            string msg = $"{util.GetNow()} -- 222- {pp.Text} {tcjm.CMD}";
                            Debug.WriteLine(msg);
                            GlobalValue.SetFormLog(msg);
                        }
                    }
                    catch (Exception ex)
                    {
                        App.Log.Error($"{ex.Message}");
                    }
                    //  Task.Delay(1000).Wait();
                }
                else
                {
                    await client1.ConnectAsync(new IPEndPoint(IPAddress.Parse(TCPTestIP), TCPTestPort));
                }
            }
            //client.SendAsync()

        }

        public void Send(string cmd)
        {
            try
            {
                byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(cmd);
                client1.SendAsync(byteArray);
            }
            catch (Exception ex)
            {
                string ClassName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
                string FuncName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                string msg = @$"
                                    Class Name [{ClassName}]
                                    Function   [{FuncName}]
                                    RecvTime   [{util.GetNow()}]
                                    Parameter
                                    Message  视觉通讯出现异常  [{ex.Message}]";
                //Debug.WriteLine(msg);
                App.Log.Error(msg);
            }
        }

        public void Dispose()
        {
            client.CloseAsync();
        }
    }
}



版权声明:本文为easyboot原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。