使用Supersocket2.0 实现客户端

通过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();
        }
    }
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Supersocket是一个针对网络通信的库,可以实现服务器和客户端之间的双向通信。要向指定客户端发送消息,需要先建立起服务器和客户端之间的连接。 首先,在服务器端使用Supersocket创建一个服务器实例,并指定一个IP地址和端口号,等待客户端的连接。当客户端连接到服务器后,服务器会为每个客户端创建一个会话实例。 在服务器端,可以通过遍历所有会话实例的方式找到指定的客户端。可以根据会话实例的特定属性,如IP地址或会话ID来确定要发送消息的客户端。一旦找到指定客户端的会话实例,可以使用会话实例的Send方法向该客户端发送消息。 在发送消息之前,需要将要发送的内容封装在一个数据包中,可以使用Supersocket提供的数据包类实现。数据包可以包含要发送的消息内容,以及其他自定义的信息。然后,可以通过调用会话实例的Send方法,并传入封装好的数据包来向指定客户端发送消息。 在客户端,也需要使用Supersocket创建一个客户端实例,并指定要连接的服务器的IP地址和端口号。连接成功后,可以通过接收服务器端发送的消息,并对消息进行处理。客户端可以根据自己的需求决定是否需要向服务器发送消息。 总之,Supersocket提供了一种便捷的方法,使得在服务器和客户端之间进行双向通信变得简单。通过建立连接,找到指定客户端的会话实例,并使用Send方法发送消息,即可实现向指定客户端发送消息的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值