最近有项目要做一个高性能网络服务器,去网络上搜到到的都是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
详情请看https://bbs.deepin.org/zh/post/210040下载链接:蓝奏云:https://gfdgdxi.lanzous.com/b01nxu1sh提取码:aser迅雷网盘:https://pan.xunlei.com/s/VMRC_xp80zcxSqFxUD1BkCtmA1,提取码:65sv百度网盘:https://pan.baidu.com/s/1Ww9L_vi2Xh4qmkJYr7eQhA提取码:6t8f(已经投稿到星火商店了,可以在星火商店下载)
2023/8/4 21:36:16 9.51MB linux windows
1
网络资源,如有侵权,通知本人,及时删除。
免责声明,请下载完后24小时内删除。
2023/7/27 4:09:23 2.13MB linux
1
具体参考微软网站http://www.microsoft.com/DOWNLOADS/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5
2023/7/22 17:27:42 44.61MB Analysis Services 组件
1
安装mysql-connector-odbc提示缺失visualstudio2013x86,安装好mysql-connector-odbc后,对应powerdesigner是32位,用于连接mysql做逆向工程。
https://dev.mysql.com/downloads/connector/j/https://docs.microsoft.com/zh-cn/visualstudio/productinfo/vs2013-sysrequirements-vs
2023/7/20 9:07:06 13.83MB mysql powerdesigner
1
发送中文短信,会用到UCS2编码,很多网友反应中文发送和接收乱码,这个烦恼可以解决了。
注意:要在系统配置里增加LANG=zh_CN.GB18030exportLANG语言配置不对,这个函数会出错的,另外,例子有点问题,换一个好了intmain(){unsignedchar*str="新年快乐,Linux";unsignedcharucs2str[1024],gbkstr[1024];intlen,i;len=EncodeUCS2(str,ucs2str);ucs2str[len]=0;for(i=0;i<len;i++)printf("%02X",ucs2str[i]);printf("\n");puts(ucs2str);len=DecodeUCS2(ucs2str,gbkstr,len);gbkstr[len]=0;puts(gbkstr);}多谢你的关注!QQ:364604751
2023/7/18 10:48:51 1KB UCS2 短信 编码 转换
1
一、进入安装目录/xwiki/WEB-INF/lib/下找到xwiki-platform-legacy-oldcore-10.2.jar二、用zip解压软件进入xwiki-platform-legacy-oldcore-10.2.jar不要解压,找到ApplicationResources_zh.properties打开以后是ascii码。
需要打开cmd进入其所在目录,输入一下命令转码。
native2ascii-reverseApplicationResources_zh.propertiesApplicationResources_zh2.properties然后就可以改汉化了。
改完之后反编码。
注意两次参数和文件名的变化。
native2asciiApplicationResources_zh2.propertiesApplicationResources_zh.properties最后直接,把ApplicationResources_zh.properties填加到xwiki-platform-legacy-oldcore-10.2.jar把原来的替换掉就可以了
2023/7/15 13:19:43 187KB Xwiki汉化
1
二维码生成与识别文件二维码无网传输电脑手机互传识别时无响应的解决办法:识别时间拉长一点,一定要在先生成后识别(不要对无二维画面做识别)不能运行的解决办法:要下载VisualC++RedistributablePackagesforVisualStudio2013https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=40784
1
https://docs.microsoft.com/zh-cn/office/vba/api/overview/
2023/7/10 4:57:23 8.06MB Office VBA 参考手册 word
1
亲测目前还在正常运行有需要的朋友可以看看试试
2023/7/7 4:49:52 270.1MB 源码
1
共 106 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡