首页 > 其他分享 >系统和服务通讯(Topshelf+TouchSocket)

系统和服务通讯(Topshelf+TouchSocket)

时间:2023-08-13 18:24:07浏览次数:344  
标签:tcpClient 通讯 service CacheService TouchSocket client mes Topshelf new

服务不是单独的,总要和其他系统进行信息交互,记录一个解决方案(方便,好用)

Topshelf 秒建 Windows 服务

推荐一个超轻量级的 .NET 网络通信框架

新建控制台,然后安装Topshelf和TouchSocket,作为服务

示例代码:

namespace TestServer
{
    class Program
    {
        static void Main(string[] args)
        {
            // 配置和运行宿主服务
            HostFactory.Run(x => 
            {
                // 指定服务类型。这里设置为 CacheService
                x.Service<CacheService>(s =>
                {
                    // 通过 new CacheService() 构建一个服务实例 
                    s.ConstructUsing(name => new CacheService());
                    // 当服务启动后执行什么
                    s.WhenStarted(tc => tc.Start());
                    // 当服务停止后执行什么
                    s.WhenStopped(tc => tc.Stop());
                });
      
                // 服务用本地系统账号来运行
                x.RunAsLocalSystem();
      
                // 服务描述信息
                x.SetDescription("缓存服务");
                // 服务显示名称
                x.SetDisplayName("CacheService");
                // 服务名称
                x.SetServiceName("CacheService");
            });
        }
    }
    public class CacheService
    {
        
        TcpService service = new TcpService();
        public CacheService()
        {
            service.Connecting = (client, e) => { };//有客户端正在连接
            service.Connected = (client, e) => { };//有客户端连接
            service.Disconnected = (client, e) => { };//有客户端断开连接
            service.Received = (client, byteBlock, requestInfo) =>
            {
                //从客户端收到信息
                string mes = byteBlock.ToString();
                Console.WriteLine($"已从{client.ID}接收到信息:{mes}");
                client.Send(mes);//将收到的信息直接返回给发送方
                //client.Send("id",mes);//将收到的信息返回给特定ID的客户端
                var clients = service.GetClients();
                foreach (var targetClient in clients)//将收到的信息返回给在线的所有客户端。
                {
                    if (targetClient.ID != client.ID)
                    {
                        targetClient.Send(mes);
                    }
                }
            };

        }

        public void Start()
        {
            
            service.Setup(new TouchSocketConfig()//载入配置     
                    .SetListenIPHosts(new IPHost[] { new IPHost("127.0.0.1:7789"), new IPHost(7790) }))//同时监听两个地址
                .Start();//启
        }

        public void Stop()
        {
            service.Stop();
        }
    }
}

新建MVC系统,安装TouchSocket,通讯一下

TcpClient tcpClient = new TcpClient();
tcpClient.Connected = (client, e) => { };//成功连接到服务器
tcpClient.Disconnected = (client, e) => { };//从服务器断开连接,当连接不成功时不会触发。
tcpClient.Received = (client, byteBlock, requestInfo) =>
{
    //从服务器收到信息
    string mes = Encoding.UTF8.GetString(byteBlock.Buffer, 0, byteBlock.Len);
    Console.WriteLine($"接收到信息:{mes}");
};

//声明配置
TouchSocketConfig config = new TouchSocketConfig();
config.SetRemoteIPHost(new IPHost("127.0.0.1:7789"))
    .UsePlugin()
    .SetBufferLength(1024 * 10);

//载入配置
tcpClient.Setup(config);
tcpClient.Connect();
tcpClient.Send("RRQM");

根据需要修改即可使用了

标签:tcpClient,通讯,service,CacheService,TouchSocket,client,mes,Topshelf,new
From: https://www.cnblogs.com/itljf/p/17626945.html

相关文章

  • MT6833天玑700平台_联发科MTK5G安卓核心板智能通讯模块
    联发科MT6833(天玑700)安卓核心板采用八核CPU,包含两颗主频高达2.2GHz的ArmCortex-A76「大」核心,提供更高的效能,带来更畅快的使用体验。高性能LPDDR4X内存频率高达2133MHz,及更快数据传输的UFS2.2,无论是看视频、玩游戏、拍照片、即时聊天或是在线办公都能享有非凡的体验。天玑700采用7......
  • 晨控CK-GW06-E01与汇川H5U系列PLC通讯手册
    晨控CK-GW06-E01与汇川H5U系列PLC通讯手册晨控CK-GW06-E01是一款支持标准工业通讯协议EtherNetIP的网关控制器,方便用户集成到PLC等控制系统中。本控制器提供了网络POE供电和直流电源供电两种方式,确保用户在使用无POE供电功能的交换机时可采用外接电源供电;系统还集成了六路......
  • CAN转PN网关profinet通讯协议与D
    你是否曾经遇到过这样的问题:如何将各种CAN设备连接到PROFINet网络中?捷米JM-PN-CAN通讯网关或许能为你解决这个难题!捷米JM-PN-CAN网关是一款自主研发的通讯网关,具有将从站功能发挥到极致。它能够将各种CAN设备轻松接入到PROfinet网络中,让你的设备实现更加高效、稳定的通信......
  • MODBUS TCP转CCLINK IE协议网关cclinkie通讯设置
    你是否曾经遇到过需要将不同的设备连接到一个统一的网络中?或者你是否曾经遇到过设备之间的通讯协议不兼容的问题?捷米的JM-CCLKIE-TCP通讯网关就是为解决这些问题而设计的。JM-CCLKIE-TCP通讯网关是一款自主研发的CCLINKIEFIELDBASIC从站功能的通讯网关,它的主要功能是将各种MO......
  • MT8788安卓核心板详细参数_MTK安卓主板开发板智能通讯模块
    MT8788安卓核心板集成了一个高效的12nmSoC,内置4GLTE调制解调器,将强大的硬件与到处可连接的全面功能设计相结合。MTK8788智能终端具备许多功能,包括4G、2.4G/5G双频WiFi、蓝牙4.2BLE、2.5W功放、USB、mipi屏接口、三路摄像头接口、GPS和各种传感器等等。MTK8788智能终端还采用了超......
  • 如何用AIRIOT物联网平台接入Modbus通讯协议
    Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为ModbusMaster,从设备方使用的......
  • C# 使用TouchSocket实现Tcp协议通讯,并且解决分包、粘包的问题
    我们知道如果Socket传输数据太频繁并且数据量级比较大,就很容易出现分包(一个包的内容分成了两份)、粘包(前一个包的内容分成了两份,其中一份连着下一个包的内容)的情况。粘包的处理方式有很多种,常见的三种是:每个包都在头部增加一个当前传输包的int4字节大小作为包头。每次接收到数据......
  • LinuxUDP通讯
    目录前言一、UDP通讯1.UDP通讯概述2.UDP的特点3.UDP的应用二、UDP基本通讯1.socket函数2.bind函数2.1主机字节序和网络字节序2.2点分制十进制转换3.recvfrom接收4.服务端完整代码5.sendto发送函数6.客户端完整代码三、TFTP文件接收程序1.TFTP概述2.TFTP通讯过程3.TFTP客户端四、......
  • DEVICENET转ETHERCAT网关连接汇川ethercat通讯协议
    你有没有遇到过生产管理系统中,设备之间的通讯问题?两个不同协议的设备进行通讯,是不是很麻烦?今天,我们为大家介绍一款神奇的产品,能够将不同协议的设备进行连接,让现场的数据交换不再困扰!捷米JM-ECT-DNT是一款DEVICENET从站功能的通讯网关,可以将DEVICENET转ETHERCAT网络连接起来。它......
  • Siemens 西门子S7-1200PLC与组态王TCP通讯
    1.0首先打开组态王软件,这里测试用的是6.6版本的2.0点击菜单栏的新建项目,然后下一步 3.0这一步是选择项目存放的目录,找到存放位置就下一步 4.0接下来就是设置工程名称了,自己根据项目定义 5.0完成以上步骤,你就会看到如下图的项目,然后我们选择菜单栏点击开发 6.0......