自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (3)
  • 问答 (3)
  • 收藏
  • 关注

原创 TouchSocket|适配一个c++的Tcp自定义协议

然后再新建一个类,名为MyClientAdapter,继承CustomFixedHeaderDataHandlingAdapter,同时指定MyResponsePackage为泛型成员。该接口大概如下,其中Build方法,会指示成员应当如何构建数据。首先新建一个类,名为MyRequestPackage,同样继承MyBase,然后实现IFixedHeaderRequestInfo。此后,我们只需要发送MyRequestPackage对象,然后适配器内部会自动调用Build函数,然后执行发送。

2023-12-06 22:36:41 2409 2

原创 Vue入门学习笔记(1)

两者的区别就是前者可创建vue2项目,且可以自定义初始化组件,但编译启动较慢。后者作为vue3的专属工具,效率高,不需要设置很多不懂的参数。安装方法非常简单,使用cmd、powershell、或者win11的终端都可以。节点在国外,所以下载可能有问题,所以最好设置一下国内加速。下列安装类型均是全局安装,方便快捷,新手建议!首先,创建一个根目录,最好全英文。创建vue项目,可使用的工具有。然后在菜单->终端->新建终端。然后用vscode打开。,说明镜像配置成功。,说明镜像配置成功。

2023-05-18 11:09:23 694

原创 C# Task.Factory.StartNew和Task.Run的坑点

初学Task时,几乎所有的资料都说Task.Factory.StartNew和Task.Run是一样的,只不过Task.Run是简版,Task.Factory.StartNew可以设置更多参数。我找了微软的文档,并没有说明这种情况。如果有懂的人,可以交流一下。可以发现,Task.Factory.StartNew并没有等待Task完成,而是直接向下执行了。可万万没想到,我在实际使用时,却发现了一个运行不一致的小“bug”。上述代码在实际运行中,就发生的结果不一致。ok,一篇水文完成。

2023-03-06 10:01:46 2133 5

原创 C# 如何实现对“属性”的扩展

例如:一个Person类,他在项目初期,只有一个属性Age,可随着项目升级,可能需要Name,Address,甚至Price。继承,会让显式的Person类无法使用声明到子类的属性,到时候必须进行强制转换,而一旦继承分支多起来的话,将非常糟糕。属性是一个类的特征,随着开发的不断升级,这种特征可能在一直变化,有时候为了向下兼容,一般属性的数量都是直接递增的。而重新编译,带来的问题就更大了,总不能把属性都声明在父类吧。那么常规做法就是继承,然后在子类添加属性。当后续你需要什么属性的时候,自己声明扩展即可。

2023-02-16 13:54:34 4237 3

原创 C# 压缩或解压

代码来源网上,经过了我的稍微改造,方便后面我的使用,如果能帮到你,当然更好。首先,你需要安装SharpZipLib。

2023-02-12 15:23:33 698

原创 Docusaurus 2.0 自定义组件

如果以后更新,或者不要了,只需要删除theme或者theme下面对应的组件目录即可。它的逻辑非常简单,如果你自定义了 theme/组件,就用你的,否则用它默认的。然后他就对我开始了手把手教学,此处我只做记录。theme表示默认主题,theme-主题名称表示特定主题。eject的意思就是我copy你的出来改,这样保险一点~~-doc 表示是文档,还有 -blog 表示博客页面。首先,找到要自定义的组件板块。没了,前面都是铺垫~~,用来发现组件。

2023-02-08 13:29:32 507

原创 C# Tcp服务器实现多端口、多协议解析

当同一个端口解析不同协议时,就需要协议侦测,举个例子说,你想用一个吸管去知道四个杯子里都是什么的时候,你只有一个一个去尝,所以这样的设计性能低下,且并不可靠,甚至会导致严重的偶发性bug。所以最好最好不要这样设计。有时候物联网设备管理平台需要接收不同厂家的物联网设备,每家的设备通讯协议各不相同。平台需要为每个厂商提供一个通讯端口。所以需要实现一个端口,对应一个数据解析器。用接口实现的好处是,实例可以自由实现,比如使用数据库实现,能够实现持久化限制访问名单。即可,具体步骤详看链接博客。

2023-01-11 12:11:25 2703 2

原创 C# 实现为Tcp服务器设计访问黑名单、白名单

黑名单的含义就是不允许黑名单上的ip地址对当前服务器进行访问。白名单的含义就是只允许白名单上的ip地址访问当前服务器。

2023-01-11 10:56:58 2928 3

原创 WPF实现超简约的MVVM事件绑定(不依赖任何东西)

你的前端,首先需要引入touchMvvm的命名空间,然后DataGridActionsCommand能够连接你的VM即可。嘶,,我这引入了一个dll,还得自己再写个类,为的就仅仅是绑定一个事件?使用非常简单,下列,我就以DataGrid的双击事件和选择项改变事件为例。一般情况下,如果想实现事件绑定,网上的教程一般都是依赖。如果想要更多的事件,前端不用动,只需要增加对应事件的。其三,则是最最难受的,如果想获得事件参数,就得重写。但是我本人很不喜欢这东西。其一,需要引入一个dll。那有没有更简单的方法呢?

2022-11-02 15:25:21 2413

原创 C# 优雅的为Tcp客户端设计心跳数据包

心跳机制是定时发送一个自定义的 结构体 (心跳包),让对方知道自己还活着,以确保连接的有效性的机制。 网络中的接收和发送数据都是使用操作系统中的 SOCKET 进行实现。 但是如果此 套接字 已经断开,那发送数据和接收数据的时候就一定会有问题。 可是如何判断这个套接字是否还可以使用呢? 这个就需要在系统中创建心跳机制。 其实TCP中已经为我们实现了一个叫做心跳的机制。但是该机制受限于操作系统,而且很容易误报。所以很少被大家使用。大家使用最多的,就是自己设计数据包,然后预留心跳格式,当对方收到心跳包时,直接返

2022-07-04 16:40:24 6632 4

原创 C# TCP如何限制单个客户端的访问流量

创建服务器后,想实现一个限流功能,应该如何实现呢?即可,具体步骤详看链接博客。实际上,该插件也能用于。

2022-06-28 10:05:42 2363

原创 C# 创建轻量级Http服务器,用于传输文件、响应webApi,展示静态文件等

有小伙伴提问,c#有没有轻量级的Http服务器,因为直接部署Asp.net Core的话,有点太大了。而且,学习成本也高。我说,微软不是有HttpListener吗?他说不好用。好吧。。。。在这里推荐RRQMSocket.Http,这是一个开源的,轻量级,高性能的Http组件。支持Ssl和多通道的文件传输。文档首页Nuget安装即可,具体步骤详看链接博客。VS、Unity安装和使用Nuget包服务器的创建非常简单,设置好需要监听的地址即可。【处理请求】HttpService处理请求的方式,主要是通过插件实

2022-06-23 17:20:40 8442

原创 C# Tcp服务器如何限制同一个IP的连接数量?

创建服务器后,想实现一个功能,就是“限制同一个IP的连接数量”。我和他说,自定义一个插件即可,结果。那ok,我给大家示例一下吧。即可,具体步骤详看链接博客。今天有小伙伴提问,他在使用。创建插件和连接计数器。

2022-06-21 15:13:43 3538

原创 .NET C# RPC产品性能测试、性能对比报告(包含Grpc、BeetleXRPC、NewLifeRPC、TouchRpc)

在10w次极简调用中,Grpc用时29.47s,也是用时最久的。BeetleXRPC用时19.34s,NewLifeRPC用时26.88s,TouchSocket用时6.06秒。基本上,TouchSocket是Grpc的五倍,是BeetleXRPC的三倍,是NewLifeRPC的四倍有余。但是值得注意的是,Grpc使用的是在ssl加密模式下HTTP数据格式,且数据参数也经过了message封装类,所以本次测试对于Grpc不是很公平,但是基本上也能给大家一些参考性意见。

2022-01-16 16:17:58 2507 2

原创 .NET C# Socket产品性能测试、性能对比报告(包含SuperSocket、HPSocket.Net、TouchSocket)

因为我是TouchSocket 的作者,所以难免会对自家产品有诸多赞扬,但是实际上我知道,TouchSocket 还有很长的路要走,好的产品只有经过时间和更多人的考验,才能淘沙出金。所以希望本篇测评,能该您一个建议,也能给TouchSocket 一个机会。下次选择Socket的时候,可以考虑一下TouchSocket 哦。

2022-01-15 21:35:29 10386 17

原创 C#搭建高效、便捷的WebSocket服务器和客户端

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

2021-12-27 13:47:22 28047 16

原创 C# 高性能RPC,TouchRpc,支持ref和out关键字、流数据、大数据传输

文章目录一、序言本节须知二、程序集源码、Demo下载2.1 源码位置2.2 Demo位置三、安装四、创建RPC4.1 创建服务五、发现、调用RPC服务六、调用痛点七、代理代码生成7.1 获取代理代码一、序言本节须知在学习本节之前,您必须熟悉RRQM中的Protocol服务器与客户端(或其派生类,例如文件传输和RPC)的创建,如果您不熟悉,请在下列链接中了解。【RRQMSocket】C# 搭建TCP自定义协议、Protocol服务器和客户端二、程序集源码、Demo下载2.1 源码位置RR

2021-11-24 14:51:15 4512 3

原创 VS、Unity安装和使用Nuget包

Nuget是一个包(package)管理平台,确切的说是.net平台的包管理工具,它提供了一系列客户端用于生成,上传和使用包(package),以及一个用于存储所有包的中心库即NuGet。Unity项目中,屏蔽了Nuget包管理器(可视化),但是Nuget包控制台依然可以使用,但是在Unity中,一切皆资源,所以为规范不建议这么做最好的方式则是资源加载dll。一般的,包都有依赖,在引入时,需要将依赖包全部下载、解压、导入(直接把dll拖入,如果包含xml文件,最好一起拖入,这样注释也有)。

2021-11-22 10:28:24 12472

原创 C# 创建基于TCP、HTTP协议的JsonRpc 2.0(可跨平台、跨语言)

前言JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 其使用JSON(RFC 4627)作为数据格式。本文中对于JSON-RPC服务框架的选取使用RRQMSocket.RPC.JsonRpc,该框架可以免费用于个人学习、商业使用等。RRQM简介RRQMSocketRRQMSocket是一个轻量级网络通信框架,其特点是多兼容、广适配、高并发。其中主要内容包括:TCP、UDP服务通信框架、大文件传输、RPC、WebApi、XmlRpc、JsonRpc等内容。RRQMSocket.RP

2021-07-05 14:55:25 3616 4

原创 C# 通过反射获取async方法返回值

大家好!今天在开发RRQMSocket.RPC时,突然发现一个问题,如何在反射调用异步方法后获得返回值?首先,先看看非异步方法如何获得。class Program{ static void Main(string[] args) { MethodInfo methodInfo = typeof(Program).GetMethod("SayHello"); object result = methodInfo.Invoke(new Program()

2021-05-08 10:03:33 3346 5

原创 C# Socket客户端固定端口连接

在使用Socket时,我们都知道创建的服务器是需要绑定端口的,这样才能被客户端正确连接。而客户端在连接后使用的端口号是由操作系统动态分配的,但是有时候我们为了方便记录,或者安全设置,希望客户端得到的端口号也是固定的,那应该怎么做呢?其实非常简单,只需要在客户端Connect之前先绑定就可以。如下代码,这样做的话,客户端在连接到服务器时使用的端口号就是8848。Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,P

2021-04-26 13:20:05 8960

原创 C# 使用内存池,Stream池防止内存碎片化

目录前言前言为什么要引入内存池?引入内存池的好处是什么?引入内存池能解决哪些问题?

2021-03-17 14:29:58 2401 1

原创 写一个简约的WPF登录窗体

Hello,大家好,我是若汝棋茗,今天让我来给大家水一篇WPF窗口的博客。先看效果图还比较满意吧,那就让我们开始吧!!首先引入RRQMSkin包,因为窗体有圆角,并且需要改变尺寸,所以使用RRQMEffectWindow来实现。然后修改window继承类为RRQMEffectWindow,后台代码一致。然后,重写RRQMEffectWindow模板。 <Style x:Key="MainWindowStyle" TargetType="{x:Type Custom:RRQM

2021-03-17 10:35:03 1165

原创 WPF 自定义控件如何设置个性化命名空间

Hello 各猿友,本猿想在这里采访一下各猿友,大家开发桌面软件是用什么语言,什么框架呢? C++之QT C++之MFC Java之swing C#之winform C#之WPF 老子从CUP指令集开始自己写好的,经过大家的对吊唁(是的你么有看错),看来大家对WPF使用较多啊!!!WPF是个优秀的UI框架!!!水了这么多,还没说到重点,搞什么飞机!!!相信大家在使用过程中都见过这种东西,xmlns:开头的,其实这就是xaml的命名空间,类似于C#的using,但是让人疑惑的是,谁会

2021-03-16 12:29:32 855

原创 C#高性能序列化、超高性能、超轻量级二进制序列化

文章目录概述性能测试分析设计思路结束概述本猿在前面两篇博客(分析C# 二进制序列化诟病所在,并解决问题(一),分析C# 二进制序列化诟病所在,并解决问题(二))将C#自带的二进制序列化已经基本上优化到了极致,但是系统自带的二进制还是有很多让人不舒服的点,比如Serializable标签、强制强类型、序列化数据庞大等,而这一切所带来的就是性能问题,那么我们这节就来场极致的优化吧。性能测试为了节约大家时间,先展示性能测试,当然了,一切不说硬件的测试都是耍流氓,那么先康康本猿的新助手配置。测试硬件:

2021-02-27 18:47:46 4445

原创 WPF制作无边框窗体、圆角窗体、支持改变大小、拖动分屏等(二)

目录上节回顾制作圆角窗体圆角及阴影窗体拖动、拖动分屏窗体改变尺寸窗体功能按钮使用RRQMSkin创建圆角窗体结束上节回顾上节已经说到如何创建一个无边框窗体,那么这节就说说如何创建圆角窗体。开整(分割线搞个仪式)制作圆角窗体思路:圆角窗体比较麻烦,网上的实现思路也五花八门,例如:WinApi直接设置窗口句柄、双窗体重叠、透明窗体+Border等。本文得思路就是透明窗体+Border,因为在本猿测试的时候发现第一种方法很容易出错,句柄不兼容等,第二种方法在Tab切换视图的时候很容易看出来,而且

2021-02-26 14:02:24 4570

原创 WPF制作无边框窗体、圆角窗体、支持改变大小、拖动分屏等(一)

目录概述需求说明无边框窗体概述Windows Presentation Foundation (WPF) 是一个可创建桌面客户端应用程序的 UI 框架。 WPF 开发平台支持广泛的应用开发功能,包括应用模型、资源、控件、图形、布局、数据绑定、文档和安全性。 此框架是 .NET Framework 的一部分,因此,在未来如果想快速的开发桌面软件,WPF腚是你的不二选择。需求说明WPF既然是桌面软件UI,那一定绕不开桌面软件的多元化(chan pin jing li de chou pi)显示方式,最常

2021-02-26 09:35:31 3693

原创 分析C# 二进制序列化诟病所在,并解决问题(二)

上节说到关于序列化,我们或许已经发现了其诟病,其实说到底二进制序列化并没有问题,只是我们的编码习惯不正确而已,那么接下来让我们来彻底优化二进制序列化,BinaryFormatter走起。。。。文章目录回顾上节分析尝试MemoryStream分析代码回顾上节上节最后,我们对代码进行了简单优化,可优化因素就是将Stream声明成了全局变量,减少了Stream的扩建和释放,测试结果比较明显,但是依然存在大量GC。 private static byte[] Serialize(object obj)

2021-02-11 02:37:30 1753 4

原创 分析C# 二进制序列化诟病所在,并解决问题(一)

什么是序列化?内存中的数据对象只有转换为二进制流才可以进行数据持久化和网络传输。将数据对象转换为二进制流的过程称为对象的序列化(Serialization)。反之,将二进制流恢复为数据对象的过程称为反序列化(Deserialization)。序列化需要保留充分的信息以恢复数据对象,但是为了节约存储空间和网络带宽,序列化后的二进制流又要尽可能小。序列化常见的使用场景是RPC框架的数据传输。常见的序列化方式有三种:二进制、xml、Json,当然还有新起之秀Protocol Buffers、Avro、Spear

2021-02-05 15:30:11 2840 1

原创 C# 优雅的解决TCP Socket粘包、分包问题

文章目录一、概述二、探索问题2.1 源码位置2.2 Demo位置2.3 预热2.4 Config配置详解三、解决思路四、数据处理适配器概述4.1 正常数据处理适配器(`NormalDataHandlingAdapter`)4.2 固定包头数据处理适配器(`FixedHeaderPackageAdapter`)4.3 固定长度数据处理适配器(`FixedSizePackageAdapter`)4.4 终止因子分割数据处理适配器(`TerminatorPackageAdapter`)五、数据处理适配器工作原理六

2020-12-05 14:16:18 10198 2

原创 C# 超简单的创建高并发、高性能TCP服务器,可用于上位机、PLC、游戏服务器等

说起TCP大家肯定都不陌生,传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。那么对于C#又应该

2020-12-05 13:51:36 14717 15

原创 WPF自定义控件、表盘、刻度、指针等控件

前言相信大家都有开发图表的经验,所以今天我给大家介绍一下我自己的控件库,让大家能指正。控件类型目前拥有的控件控件一该按钮是仿照的QQ的登录按钮,点击会有水波纹效果控件二这是一个带有提示文本的输入框控件三这是一个扇形刻度盘,用于显示扇形刻度控件四这是一个扇形环,用于显示环状扇形控件五这是一个扇形文字,用于显示环状文字案例控件该案例控件可以重写模板,所以抛砖引玉,供各位大佬参照具体的应用与开发在B站视频,欢迎大家...

2020-08-29 09:04:23 2250

原创 Unity3D 使用Socket进行游戏数据的通信

前言Unity 是一款功能非常强大的游戏开发引擎,相信有很多小伙伴使用过。

2020-05-06 18:00:25 2061

原创 C# 实现超大文件传输、断点续传等功能

经常有小伙伴在开发控制台、winform、WPF等C/S软件时,会有文件传输的需求。正好RRQMSocket.RPC完美支持这个,所以给大家介绍一波。文档首页Nuget安装即可,具体步骤详看链接博客。VS、Unity安装和使用Nuget包RRQM文件传输使用的是特殊传输协议,与FTP,HTTP等协议完全不兼容,所以如果使用文件传输,则服务器与客户端必须均使用RRQM组件。因为RRQM使用的是特殊协议,所以性能、功能上要远强于FTP,且搭建简单,支持多通道传输等。演示: 可以看到,下图正在上传一个Window

2019-09-04 20:16:43 17547 12

TouchSocket解析自定义协议.7z

TouchSocket解析自定义协议.7z

2023-12-06

IOCP与Select测试.7z

这是一个测试IOCP疑似内存泄漏的Demo

2021-11-29

JsonRpcDemo.zip

这是在C#开发的JsonRpc服务器, 特点是: 异常反馈 、支持自定义类型、 支持类型嵌套、支持js、Android等调用。

2021-07-05

高仿微信即时通讯.zip

这是一款类似微信的即时通信软件,可以实现的基本内容是收发消息和收发文件,当然可以对文件进行断点续传等操作。通讯基础是tcp Socket,但是已经解决了粘包的问题,不仅如此,对于文件传输的操作更加方便,所以二次开发将会更加简单。

2020-06-23

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除