最近有项目要做一个高性能网络服务器,去网络上搜到到的都是C++版本而且是英文或者简单的DEMO,所以自己动手写了C#的DEMO。
网络上只写接收到的数据,没有说怎么处理缓冲区数据,本DEMO简单的介绍如何处理接收到的数据。
简单易用,希望对大家有用.1、在C#中,不用去面对完成端口的操作系统内核对象,Microsoft已经为我们提供了SocketAsyncEventArgs类,它封装了IOCP的使用。
请参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1。
2、我的SocketAsyncEventArgsPool类使用List对象来存储对客户端来通信的SocketAsyncEventArgs对象,它相当于直接使用内核对象时的IoContext。
我这样设计比用堆栈来实现的好处理是,我可以在SocketAsyncEventArgsPool池中找到任何一个与服务器连接的客户,主动向它发信息。
而用堆栈来实现的话,要主动给客户发信息,则还要设计一个结构来存储已连接上服务器的客户。
3、对每一个客户端不管还发送还是接收,我使用同一个SocketAsyncEventArgs对象,对每一个客户端来说,通信是同步进行的,也就是说服务器高度保证同一个客户连接上要么在投递发送请求,并等待;
或者是在投递接收请求,等待中。
本例只做echo服务器,还未考虑由服务器主动向客户发送信息。
4、SocketAsyncEventArgs的UserToken被直接设定为被接受的客户端Socket。
5、没有使用BufferManager类,因为我在初始化时给每一个SocketAsyncEventArgsPool中的对象分配一个缓冲区,发送时使用Arrary.Copy来进行字符拷贝,不去改变缓冲区的位置,只改变使用的长度,因此在下次投递接收请求时恢复缓冲区长度就可以了!如果要主动给客户发信息的话,可以new一个SocketAsyncEventArgs对象,或者在初始化中建立几个来专门用于主动发送信息,因为这种需求一般是进行信息群发,建立一个对象可以用于很多次信息发送,总体来看,这种花销不大,还减去了字符拷贝和消耗。
6、测试结果:(在我的笔记本上时行的,我的本本是T420I78G内存)100客户100,000(十万次)不间断的发送接收数据(发送和接收之间没有Sleep,就一个一循环,不断的发送与接收)耗时3004.6325秒完成总共10,000,000一千万次访问平均每分完成199,691.6次发送与接收平均每秒完成3,328.2次发送与接收整个运行过程中,内存消耗在开始两三分种后就保持稳定不再增涨。
看了一下对每个客户端的延迟最多不超过2秒。
2023/8/10 0:44:45 64KB C# IOCP TCP 完成端口
1
ADS1256和STM32的数据采集电路原理图,可以直接使用AD画出。
2023/8/8 19:41:24 221KB ADS1256 STM32 原理图 数据采集
1
ssm框架mysql数据库easyui前端,带数据库文件,可直接导入。
从csdn下载的13分那个,直接使用有问题,自己修改完,可以直接使用。
登录地址为:http:localhost:xxxx/xxx/login.do,用户名admin/123456
2023/8/8 14:39:04 12.52MB ssm 权限管理 源码 java
1
getwxacodeunlimit生成二维码并保存在本地。
获取到access_token可以直接使用
2023/8/7 18:56:03 8KB 小程序二维码
1
2018.11.20更新,已编译,新加入了debug版本的库。
支持TLS1.3,包含32位、64位的动态库、静态库,可直接使用。
2023/8/7 6:45:08 188.35MB OpenSSL TLS1.3 加密库 SSL
1
SkinSharp简介SkinSharp是Windows环境下一款强大的通用换肤库。
SkinSharp作为通用换肤库,只需要在您的程序中添加一行代码,就能让您的界面焕然一新,并拥有多种主题风格和色调的动态切换功能以及Aero透明边框特效。
SkinSharp采用独特的软件界面开发技术,让原本复杂繁琐的界面编程变得轻松自如。
SkinSharp换肤库目前支持所有流行的开发工具。
SkinSharp可以在不修改客户程序的基础上,对在Windows上运行的任何程序进行随意换肤,完全实现了将程序界面与业务逻辑彻底分离,从而可以让您轻松地完成程序界面的完美升级。
SkinSharp优势SkinSharp与同类产品相比有如下优势:1.超轻量级换肤,SkinSharp不依赖于任何第三方类库或模板库(STL,MFC,ATL等),仅仅使用到系统最基本的核心动态链接库。
因此体积在同类产品上是最小的,仅不到200K,运行效率也是最高的,所有绘制和操作全部都是基于Win32API的,其他同类换肤库则十分臃肿。
2.SkinSharp在滚动条和菜单换肤上,和其他同类换肤库有着明显的优势。
在滚动条换肤上,SkinSharp做到了所有控件内置滚动条的换肤,并且不修改控件任何风格和属性,完美兼容各个控件。
在菜单换肤上,SkinSharp采用独特的技术对所有菜单实行换肤,没错,是所有的菜单,包括IE控件内部菜单,系统菜单,滚动条菜单等等,只要是菜单就能换肤!并且支持所有菜单的透明!3.SkinSharp采用先进的皮肤格式,完美兼容各种不同形状外观的皮肤制作。
SkinSharp皮肤采用超高压缩率,体积超小,最小的皮肤小于10K。
载入效率极高,无任何延迟!设计的先进性使得SkinSharp的皮肤有着很好的版本兼容性,即使今后增加了皮肤属性项,也依然能够保持版本的兼容性。
SkinSharp的皮肤同时支持加密功能,保护您自己设计的皮肤不被其他人恶意使用。
4.SkinSharp可以让你轻松拥有Aero透明边框以及阴影特效!SkinSharp仅用标准的GDIAPI就实现了Aero特效,并且效率极高!其他换肤库则没有此特性或者使用了GDI+,这样在Windows2000等系统中你就必须多带一个GDI+的动态链接库,并且效率会有所影响。
另外,SkinSharp还支持边缘阴影,还可以调整阴影参数,实现超炫效果!5.SkinSharp支持更改皮肤的色调,饱和度,亮度,窗体的透明度,菜单的透明度。
仅一款皮肤,您就可以拥有不同的色调主题!做出类似QQ色调主题是一件轻而易举的事情!6.SkinSharp并非COM组件,仅以标准的动态或静态链接库的形式存在,SkinSharp无需进行系统注册,直接使用!7.SkinSharp完全支持Unicode,提供多种编码格式,支持静态库链接,与客户程序可以进行无缝整合!支持绝大多数第三方控件的完美换肤!界面与业务逻辑彻底分离!更多优势特性等待您去发掘!
2023/8/6 22:49:48 2.76MB SkinSharp VB皮肤控件
1
用opencv和c++编写的图像非线性滤波程序可直接使用
2023/8/6 15:25:42 2.89MB 非线性滤波 opencv c++
1
MATLAB新许可文件(可通用)直接使用即可;
有详细的使用方法
2023/8/6 13:08:30 5KB MATLAB
1
民族数据,中英文!label-value{value:'Han',label:'汉族',},{value:'Mongol',label:'蒙古族',},
2023/8/5 12:20:13 4KB js vue elementui
1
图片上传功能几乎是每一个项目都必备的,而没遇到一次都要重新写一篇,就陷入了重复造轮子的圈子中,所以今天把这个上传图片的小demo上传到网上,供大家以后遇到的时候直接使用,提供方便,避免做重复的事情。
2023/8/4 8:17:22 644KB 图片上传 回调 上传 java上传
1
共 1000 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡