.Net网络通信组件 - TouchSocket

文章目录

  • .Net网络通信组件 - TouchSocket
    • 1、新建.Net8控制台项目
    • 2、Nuget安装TouchSocket组件
    • 3、编写服务端代码
    • 4、编写客户端代码
    • 5、编写Program代码
    • 6、运行效果
    • 7、日志组件(NLog)参考我的另一篇博客

.Net网络通信组件 - TouchSocket

1、新建.Net8控制台项目

2、Nuget安装TouchSocket组件

install-package TouchSocket

3、编写服务端代码


using System.Text;
using TestTouchSocketApp.TouchSockets.Dtos;
using TouchSocket.Core;
using TouchSocket.Sockets;namespace TestTouchSocketApp.TouchSockets
{public class TestTouchSocketServer{public TestTouchSocketServer(){//初始化服务端InitServer();}public TcpService TcpService { get; set; }public List<TouchSocketClientDto> Clients { get; set; }/// <summary>/// 初始化服务端/// </summary>private void InitServer(){//初始化TcpService = new TcpService();//初始化Clients = new();TcpService.Connecting += (client, e) =>{//返回return EasyTask.CompletedTask;};TcpService.Connected += (client, e) =>{//初始化TouchSocketClientDto clientDto = new();//赋值clientDto.Index = Clients.Count + 1;clientDto.ClientId = client.Id;clientDto.Host = client.IP;clientDto.Port = client.Port;clientDto.Online = true;clientDto.ConnectTime = DateTime.Now;//添加Clients.Add(clientDto);//记录日志LingbugLogUtil.Info($"有新客户端上线啦:{TouchSocketClientDto.GetContentStr(clientDto)}");//返回return EasyTask.CompletedTask;};TcpService.Received += (client, e) =>{try{//读取var bytes = e.ByteBlock.ToArray();//读取var clientMsg = Encoding.UTF8.GetString(bytes);//logstring log = $"Server Received,收到客户端发送的消息:【{clientMsg}】";//记录日志LingbugLogUtil.Info(log);}catch (Exception exception){//记录日志LingbugLogUtil.Error($"Server Received,读取客户端消息异常:{exception.Message}", exception);}//返回return EasyTask.CompletedTask;};TcpService.Closing += (client, e) =>{//返回return EasyTask.CompletedTask;};TcpService.Closed += (client, e) =>{foreach (var clientDto in Clients.FindAll(r => r.ClientId == client.Id)){//赋值clientDto.Online = false;clientDto.DisConnectTime = DateTime.Now;//记录日志LingbugLogUtil.Info($"客户端已下线:{TouchSocketClientDto.GetContentStr(clientDto)}");}//返回return EasyTask.CompletedTask;};//初始化var config = new TouchSocketConfig();//赋值config.SetListenIPHosts(new IPHost[] { "127.0.0.1:9990", "127.0.0.1:9991" });config.SetMaxCount(100);config.SetThreadCount(10);//配置TcpService.Setup(config);//启动TcpService.Start();//打印LingbugLogUtil.Info("server is started,listening on 127.0.0.1:9990,127.0.0.1:9991");}/// <summary>/// 获取在线客户端/// </summary>/// <returns></returns>public List<TouchSocketClientDto> GetConnectedClients(){//数据var clients = Clients ?? new();//过滤return clients.FindAll(r => r.Online);}/// <summary>/// 发送消息/// </summary>/// <param name="clientId"></param>/// <param name="msg"></param>public void SendMsg(string clientId, string msg){//发送消息TcpService.Send(clientId, msg);}}
}

4、编写客户端代码


using System.Text;
using TouchSocket.Core;
using TouchSocket.Sockets;namespace TestTouchSocketApp.TouchSockets
{public class TestTouchSocketClient{public TestTouchSocketClient(string listenServer){//初始化客户端InitClient(listenServer);}public TcpClient TcpClient { get; set; }/// <summary>/// 初始化客户端/// </summary>/// <param name="listenServer"></param>private void InitClient(string listenServer){//初始化TcpClient = new TcpClient();TcpClient.Connecting += (client, e) =>{//返回return EasyTask.CompletedTask;};TcpClient.Connected += (client, e) =>{//返回return EasyTask.CompletedTask;};TcpClient.Received += (client, e) =>{try{//读取var bytes = e.ByteBlock.ToArray();//读取var serverMsg = Encoding.UTF8.GetString(bytes);//logstring log = $"Client Received,收到服务器发送的消息:【{serverMsg}】";//记录日志LingbugLogUtil.Info(log);}catch (Exception exception){//记录日志LingbugLogUtil.Error($"Client Received,读取服务器消息异常:{exception.Message}", exception);}//返回return EasyTask.CompletedTask;};TcpClient.Closing += (client, e) =>{//返回return EasyTask.CompletedTask;};TcpClient.Closed += (client, e) =>{//返回return EasyTask.CompletedTask;};//初始化var config = new TouchSocketConfig();//赋值config.SetRemoteIPHost(new IPHost(listenServer));//配置TcpClient.Setup(config);//启动TcpClient.Connect();//打印LingbugLogUtil.Info($"client is connected to server,server is {listenServer}");}/// <summary>/// 发送消息/// </summary>/// <param name="msg"></param>public void SendMsg(string msg){//发送消息TcpClient.Send(msg);}}
}

5、编写Program代码


using TestTouchSocketApp.TouchSockets;
using TestTouchSocketApp.TouchSockets.Dtos;namespace TestTouchSocketApp
{internal class Program{static void Main(string[] args){try{//打印Console.WriteLine("请输入,1:服务端;2:客户端;");//读取var input = Console.ReadLine();if (input == "1"){//初始化TestTouchSocketServer server = new();//打印Console.WriteLine("请输入要发送给客户端的消息:");//读取var msg = Console.ReadLine();//打印Console.WriteLine("要发送给哪个客户端,当前连接的客户端有:");//获取在线客户端var clients = server.GetConnectedClients();foreach (var client in clients){//打印Console.WriteLine(TouchSocketClientDto.GetContentStr(client));}//读取var clientId = Console.ReadLine();//发送消息server.SendMsg(clientId, msg);}else if (input == "2"){//打印Console.WriteLine("请输入要连接的服务端地址:");//读取var server = Console.ReadLine();//初始化TestTouchSocketClient client = new(server);//打印Console.WriteLine("请输入要发送给服务器的消息:");//读取var msg = Console.ReadLine();//发送消息client.SendMsg(msg);}}catch (Exception e){//记录日志LingbugLogUtil.Error($"程序异常:{e.Message}", e);}//读取Console.ReadKey();}}
}

6、运行效果

在这里插入图片描述

7、日志组件(NLog)参考我的另一篇博客

.Net日志组件之NLog的使用和配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/429482.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm的使用

PyCharm的入门使用教程 下载和安装PyCharm&#xff1a; 首先&#xff0c;访问JetBrains官方网站&#xff08;https://www.jetbrains.com/pycharm/&#xff09;下载PyCharm的最新版本。根据您的操作系统选择合适的版本进行下载。 安装完成后&#xff0c;打开PyCharm。 创建新…

深度学习03-神经网络02-激活函数

可以使用这个进行跳转链接​​​​​​​http://playground.tensorflow.org/#activationrelu&batchSize11&datasetspiralDatasetreg-gauss&learningRate0.01ularizationRate0.1&noise0&networkShape7,5,4,3,2&seed0.54477&showTestDatafalse&d…

【Unity设计模式】Unity MVC/MVP架构介绍,及MVC/MVP框架的简单应用

文章目录 什么是MVC&#xff1f;MVC眼花缭乱设计图MVP和MVC最经典的MVC的业务流程Unity MVC 框架示例1. 创建项目结构2. 实现模型3. 实现视图4. 实现控制器5. 使用示例 总结参考完结 什么是MVC&#xff1f; MVC自1982年被设计出来&#xff0c;至今都有着很大比重的使用率&…

HCIA--实验十八:配置全局DCHP

一、实验内容 1.需求/要求&#xff1a; 使用一台5700交换机和一台PC,实现全局DHCP的配置&#xff0c;并且自定义配置网关&#xff0c;配置DNS。 二、实验过程 1.拓扑图&#xff1a; 2.步骤&#xff1a; 1.SW1激活DHCP服务&#xff0c;创建vlan10 2.SW1给vlan10添加ip地址 …

Transformer模型-7- Decoder

概述 Decoder也是N6层堆叠的结构&#xff0c;每层被分3层: 两个注意力层和前馈网络层&#xff0c;同Encoder一样在主层后都加有Add&Norm&#xff0c;负责残差连接和归一化操作。 Encoder与Decoder有三大主要的不同&#xff1a; 第一层 Masked Multi-Head Attention: 采用…

Linux 动静态库

目录 一.静态库 1.理解静态库 a.什么是静态库&#xff1f; b.创建静态库的理论&#xff1f; 2.打包静态库 3.静态库的使用方法 a.头文件找不着 b.链接报错——库函数文件找不着 4.将静态库文件写到系统目录下 a.直接拷贝 b.建立软链接 二.动态库 1.什么是动态库&am…

通过标签实现有序:优化你的 FastAPI 生成的 TypeScript 客户端

在软件开发的世界里&#xff0c;API 客户端代码的质量直接影响着应用程序的性能和可维护性。随着项目规模的扩大&#xff0c;自动化生成的代码往往变得臃肿且难以管理。但幸运的是&#xff0c;通过一系列的优化策略&#xff0c;我们可以显著提升这些代码的优雅与效能。在本文中…

C#如何把写好的类编译成dll文件

1 新建一个类库项目 2 直接改写这个Class1.cs文件 3 记得要添加Windows.Forms引用 4 我直接把在别的项目中做好的cs文件搞到这里来&#xff0c;连文件名也改了&#xff08;FilesDirectory.cs&#xff09;&#xff0c;这里using System.Windows.Forms不会报错&#xff0c;因为前…

用Qt 对接‌百度AI平台

很多同学想利用几大模型AI弄点东西&#xff0c;但又不知道如何去介入&#xff1f;&#xff1f;最近帮同学弄点东西&#xff0c;刚好要接入到AI平台&#xff0c;就顺便研究了一下&#xff0c;并记录下来。 首先我们选择的 AI模型是百度的&#xff0c;然后注册&#xff0c;申请密…

8. 尝试微调LLM大型语言模型,让它会写唐诗

这篇文章与03. 进阶指南&#xff1a;自定义 Prompt 提升大模型解题能力一样&#xff0c;本质上是专注于“用”而非“写”&#xff0c;你可以像之前一样&#xff0c;对整体的流程有了一个了解&#xff0c;尝试调整超参数部分来查看对微调的影响。 这里同样是生成式人工智能导论&…

13年计算机考研408-数据结构

解析&#xff1a; 这个降序链表不影响时间复杂度&#xff0c;因为是链表&#xff0c;所以你想要升序就使用头插法&#xff0c;你想要降序就使用尾插法。 然后我们来分析一下最坏的情况是什么样的。 因为m和n都是两个有序的升序序列。 如果刚好m的最大值小于n的最小值&#xff0…

消息中间件---Kafka

一、什么是Kafka&#xff1f; Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统&#xff1b; 流处理事什么呢&#xff1f; 流处理就是数据处理工作流&#xff0c;本质上是一种计算机编程范例。流处理是对接收到的新数据事件的连续处理。‌它涉及对从生产者到消…

10年408考研真题-数据结构

23.[2010统考真题]若元素 a,b,c,d,e,f 依次进栈&#xff0c;允许进栈、退栈操作交替进行&#xff0c;但不允许连续3次进行退栈操作&#xff0c;不可能得到的出栈序列是(D)。 A.dcebfa B.cbdaef C.bcaefd D.afedcb 解析&#xff1a; 直接看D选项&#xff0…

Python | Leetcode Python题解之第420题强密码检验器

题目&#xff1a; 题解&#xff1a; class Solution:def strongPasswordChecker(self, password: str) -> int:n len(password)has_lower has_upper has_digit Falsefor ch in password:if ch.islower():has_lower Trueelif ch.isupper():has_upper Trueelif ch.isdi…

微服务保护之熔断降级

在微服务架构中&#xff0c;服务之间的调用是通过网络进行的&#xff0c;网络的不确定性和依赖服务的不可控性&#xff0c;可能导致某个服务出现异常或性能问题&#xff0c;进而引发整个系统的故障&#xff0c;这被称为 微服务雪崩。为了防止这种情况发生&#xff0c;常用的一些…

pytorch实现RNN网络

目录 1.导包 2. 加载本地文本数据 3.构建循环神经网络层 4.初始化隐藏状态state 5.创建随机的数据&#xff0c;检测一下代码是否能正常运行 6. 构建一个完整的循环神经网络 7.模型训练 8.个人知识点理解 1.导包 import torch from torch import nn from torch.nn imp…

Python画笔案例-057 绘制蜘蛛网

1、绘制蜘蛛网 通过 python 的turtle 库绘制 蜘蛛网,如下图: 2、实现代码 绘制蜘蛛网,以下为实现代码: """蜘蛛网.py """ import turtledef draw_circle(pos,r):"""p

实时数据的处理一致性

实时数据一致性的定义以及面临的挑战‍‍‍‍‍ 数据一致性通常指的是数据在整个系统或多个系统中保持准确、可靠和同步的状态。在实时数据处理中&#xff0c;一致性包括但不限于数据的准确性、完整性、时效性和顺序性。 下图是典型的实时/流式数据处理的流程&#xff1a; 1、…

Infineon——TC397 Multicore简介

文章目录 前言一、TC397简介二、命名规则三、多核开发建议 前言 AURIX™ TC3xx微控制器架构具有多达6个独立的处理器内核CPU0…CPU5, 可在一个统一平台上无缝托管多个应用程序和操作系统. 由于实现了具有独立读取接口的多个程序Flash模块, 该架构支持进一步的实时处理. AURIX™…

毕业设计选题:基于ssm+vue+uniapp的驾校预约管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…