最近有项目要做一个高功能网络服务器,决定下功夫搞定完成端口(IOCP),最终花了一个星期终于把它弄清楚了,并用C++写了一个版本,效率很不错。
但,从项目的总体需求来考虑,最终决定上.net平台,因此又花了一天一夜弄出了一个C#版,在这与大家分享。
一些心得体会: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秒。
2020/5/13 2:27:34 15KB IOCP 完成端口 源码
1
名称:GXDLCD多层菜单v1.2.1作者:中国传惠TranSmartgongxd@126.com特点:可以在液晶LCM上显示最大254层深度的菜单,可以非常方便的使用和移植。
字符型显示适用于St7920控制芯片。
图像显示适用于st7656控制芯片,不带字库要本人实现汉字字符显示在图像模式下支持焦点菜单反白,焦点菜单反白流程是:1.调用LCD_disp_SetReverse(1),打开液晶反白显示,以后的输出都是反白显示2.输出焦点菜单内容3.调用LCD_disp_SetReverse(0),关闭液晶反白显示,以后的输出都是正常显示可以根据此流程,在各种控制芯片上实现反白显示。
历史:2010年4月7日(星期三)23:44fishingnet000@163.com修正LCD_DisplayBMP_Driver(unsignedchar*PicData)2009-9-22添加在图形模式下焦点行反白的功能2009-8-2添加N层菜单功能,修改屏幕参数定义2009-3-4初始版本
2015/7/25 18:27:07 138KB st7565 驱动 LCD多层菜单
1
问题描述:利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。
但是,这要求在发送端通过一个编码系统对待传数据预先编码;
在接收端将传来的数据进行译码(复原)。
对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。
试为这样的信息收发站写一个哈夫曼码的编译码系统。
基本要求:一个完整的系统应具有以下功能:(l)I:初始化(Initialization)。
从终端读入字符集大小n,及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmtree中。
(2)C:编码(Coding)。
利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。
(3)D:编码(Decoding)。
利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。
(4)P:印代码文件(Print)。
将文件codefile以紧凑格式显示在终端上,每行50个代码。
同时将此字符方式的编码文件写入文件codeprint中。
(5)T:印哈夫曼树(Treeprinting)。
将已在内存中的哈夫曼树以直观的方式(树或凹入表方式)显示在终端上,同时将此字符方式的哈夫曼树写入文件treeprint中。
实现提示根据题目要求把程序划成5个模块,设计成菜单方式,每次执行一个模块后返回菜单。
除了初始化(I)过程外,在每次执行时都经过一次读取磁盘文件数据。
这是为了如果在程序执行后一直没有进行初始化(I)过程,为了能使后面的操作顺利进行,可以通过读取旧的数据来进行工作。
比如:如果程序的工作需要的字符集和权值数据是固定的,只要在安装程序时进行一次初始(I)化操作就可以了。
再在次运行程序时,不管进行那项操作都可以把需要的数据读入到内存。
算法分析本程序主要用到了三个算法。
(1)哈夫曼编码在初始化(I)的过程中间,要用输入的字符和权值建立哈夫曼树并求得哈夫曼编码。
先将输入的字符和权值存放到一个结构体数组中,建立哈夫曼树,将计算所的哈夫曼编码存储到另一个结构体数组中。
(2)串的匹配在编码(D)的过程中间,要对已经编码过的代码译码,可利用循环,将代码中的与哈夫曼编码的长度相同的串与这个哈夫曼编码比较,如果相等就回显并存入文件。
(3)二叉树的遍历在印哈夫曼树(T)的中,因为哈夫曼树也是二叉树,所以就要利用二叉树的先序遍历将哈夫曼树输出。
[测试数据]根据实验要求,在tobetrans.dat中输入"THISPROGRAMISMYFAVORITE",字符集和其频度如下:字符 __ A B C D E F G H I J K L M频度 186 64 23 22 32 103 21 15 47 57 1 5 32 20字符 N O P Q R S T U V W X Y Z 频度 20 56 19 2 50 51 55 30 10 11 2 21 2
2021/11/10 18:15:21 4KB 课程设计 c/c++ 哈夫曼树 编码
1
CSpect插件各种插件,和:trade_mark:的仿真器。
在下载最新版本。
外挂程式UART记录器一个可配置的记录器,用于CSpect模仿的NextESP和PiUART。
有关安装和配置的详细信息,请参见其。
UART替换缓冲的UART替代内部CSpect模仿的UART。
有关安装和配置的详细信息,请参见其。
备用UART将二进制字节写入串行端口,而内部CSpectUART将字节限制为ASCII字符0x00..0x3f。
发送AT指令到ESP-01并不重要,但是使用对ESP进行编程需要一个二进制UART。
UART使用预分频器计算(考虑当前视频时序)动态响应写入的UARTI/
2020/3/14 8:03:41 793KB plugin emulator csharp plugins
1
设计思想(1)程序主体结构部分:说明部分%%规则部分%%辅助程序部分(2)主体结构的说明在这里说明部分告诉我们使用的LETTER,DIGIT,IDENT(标识符,通常定义为字母开头的字母数字串)和STR(字符串常量,通常定义为双引号括起来的一串字符)是什么意思.这部分也可以包含一些初始化代码.例如用#include来使用标准的头文件和前向说明(forward,references).这些代码应该再标记"%{"和"%}"之间;规则部分>可以包括任何你想用来分析的代码;我们这里包括了忽略所有注释中字符的功能,传送ID名称和字符串常量内容到主调函数和main函数的功能.(3)实现原理程序中先判断这个句语句中每个单元为关键字、常数、运算符、界符,对与不同的单词符号给出不同编码方式的编码,用以区分之。
PL/0语言的EBNF表示::==;::=={|};::=+|-::=*|/::==|#|=::=a|b|…|X|Y|Z::=0|1|2|…|8|9三:设计过程1.关键字:void,main,if,then,break,int,Char,float,include,for,while,printfscanf并为小写。
2."+”;”-”;”*”;”/”;”:=“;”:”;”=“;”“;”=“;”(“;”)”;”;”;”#”为运算符。
3.其他标记如字符串,表示以字母开头的标识符。
4.空格符跳过。
5.各符号对应种别码关键字分别对应1-13运算符分别对应401-418,501-513。
字符串对应100常量对应200结束符#四:举例说明目标:实现对常量的判别代码:digit[0-9]letter[A-Za-z]other_char[!-@\[-~]id({letter}|[_])({letter}|{digit}|[_])*string{({letter}|{digit}|{other_char})+}int_num{digit}+%%[|\t|\n]+"auto"|"double"|"int"|"struct"|"break"|"else"|"long"|"switch"|"case"|"enum"|"register"|"typedef"|"char"|"extern"|"return"|"union"|"const"|"float"|"short"|"unsigned"|"continue"|"for"|"signed"|"void"|"default"|"goto"|"sizeof"|"do"|"if"|"static"|"while"|"main"{Upper(yytext,yyleng);printf("%s,NULL\n",yytext);}\"([!-~])*\"{printf("CONST_string,%s\n",yytext);}-?{int_num}[.]{int_num}?([E][+|-]?{int_num})?{printf("CONST_real,%s\n",yytext);}"0x"?{int_num}{printf("CONST_int,%s\n",yytext);}","|";"|"("|")"|"{"|"}"|"["|"]"|"->"|"."|"!"|"~"|"++"|"--"|"*"|"&"|"sizeof"|"/"|"%"|"+"|"-"|">"|"="|">="|"<<="|"&="|"^="|"|="|"="{printf("%s,NULL\n",yytext);}{id}{printf("ID,%s\n",yytext);}{digit}({letter})+{printf("error1:%s\n",yytext);}%%#includeUpper(char*s,intl){inti;for(i=0;i<l;i++){s[i]=toupper(s[i])
2021/11/7 5:50:07 105KB 词法分析器制作
1
Word语音打字校对专家5.92特别版[在百度搜索相关主题]软件大小:4.41MB软件语言:简体中文软件类别:国产软件/办公软件运行环境:WinVista,Win2003,WinXP,Win2000授权类型:免费版Word语音打字校对专家是一款针对Word文档语音输入识别和语音合成软件,能在你键盘输入的同时把你在Word中所输入的字符或汉字读出来,这样就可以大幅度提高工作效率了,这点对于用五笔或其它形码的朋友来说就更显得意义重大了,它能避免汉字输入过程中很多最常犯的错误和许多稀奇古怪、莫名其妙的错误。
这个软件的另外一个神奇功能就是可以将Word或剪贴板中的文字读出,这样对于编辑校对稿子就很省事了,不必一边看稿子一边看屏幕校对,两眼昏花了。
新增功能:1.对编排后的文字文件进行朗读。
支持记事本、写字板、Word等常用办公软件。
2.对键盘录入的阿拉伯数字、英文字符、中文文字、中英文标点进行语音提示,可避免差错,提高工作效率。
3.对剪贴板上文字文件进行朗读。
如在网页上浏览了一段好文章,将文章内容选中,然后按Ctrl+C键就能即时朗读了。
4.可在Word2000/XP/2003、记事本、写字板等常用办公软件下正常朗读。
6.新增把Word及TXT等文字文件直接转换成WAV声音文件。
5.新增语音计算器,只要使用键盘或鼠标输入数值,计算机就会自动报出加减乘除等符号名称,并会瞬间给你报出答案。
特别适用于需要大量数据统计如财会人员使用。
7.语音朗读校对:当语音输入完一篇文章以后,你可以让计算机用普通话给你朗读一遍。
这样,通常需要两个人的校对工作,一个人就可以轻松完成。
同时,利用这一功能,你可以把看书变成“听书”。
比如,你从网上下载一部小说,然后让计算机用普通话给你朗读,这样,你就可以闭上眼睛“看书”了。
8.在进行文章朗读时,可读出全角和半角标点以及各种常用的符号,如逗号、美元等符号。
9.新增支持英文语音、中文男声语音、中文女声语音等多种语音种类的发声,并能调理语音朗读速度,无论击键的速度有多快,都可以按照先后顺序读出来。
10.新增语音键盘功能,并支持鼠标左、右键的朗读,它是电脑新手及盲人操作键盘鼠标的辅助工具。
在QQ聊天中也能正常发声。
11.你还可以使用语音在浏览器上输入文字,可以使用语音来操作浏览器和鼠标、键盘,还可以朗读网页。
在电脑上打一篇文章、输入一个表格时最好要一些提示声音,就不会输入错了,利用电脑校对文稿,自己一个人就可以做校对工作。
2017/10/2 22:17:14 4.41MB Word语音打字校对专家 5.92 特别版
1
1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、笼统数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
2021/5/20 14:17:55 868KB 数据结构
1
XShell7免费版是一款高效专业的实用型免费SSH客户端。
XShell简单强悍,支持标签式的环境,动态端口转发,自定义键的映射关系,用户定义的按钮,VB脚本,显示2字节字符和国际言语支持UNICODE的终端
2020/4/27 8:03:07 45.32MB xhsell xftp
1
AdvancedArchivePasswordRecovery4.54如果出现英文界面,先切换语言:“Options”-“Language”---“English”修改选择为“简体中文”如果提示输入注册码,注册码是ARCHPRP-GSVMT-66892-GKVMB-52992或ARCHPRP-KSNYZ-65395-WFZFG-56252软件注不注册都可以的,一样使用。
基本操作步骤1、先打开一个带密码的文件2、选择破解类型/攻击类型3、选择范围如果你的密码是数字的就选数字,如果是字母的就先字母,密码必须在要选择的范围内才能解出来,选得越多,组合就越多,相对来说就慢了。
如果不晓得密码范围的只能是猜测性选择。
关于功能说明1、暴力破解:尝试选择范围内所有的字符组合例如:选择范围:数字长度:1-6从1开始跑到9999992、掩码:已晓得密码某个位置的字符例如:掩码为:www.?????.com范围选小写a-z从www.aaaaa.com跑到www.zzzzz.com3、字典:在字典中寻找密码
2021/10/26 15:30:38 4.24MB Advanced Archive Password Recovery
1
(重要!!!其中使用了easyx图形库,easyx的外部文件需自己另外下载并配置好,本资源未包括该扩展库的文件,即把几个文件放进VC6.0的Lib文件夹里就好了)作品名称:魔方还原作品功能:进行三阶魔方还原。
界面介绍:打开程序首先进入一个有着发光魔方背景的欢迎界面,有“Rubik”和“Help”两个按钮。
按“Help”按钮进入协助界面,显示用键盘操作魔方的方法。
按“Rubik”进入魔方还原的主界面,左边是一个可以看到三面的立体魔方,右边是与立体魔方对应的六面展开图。
魔方初始状态是未被打乱的状态。
另外搭配主界面的还有一个控制台窗口,用于显示操作步骤。
操作说明:从键盘直接输入字符控制,各字符含义如下。
0:按数字零退出程序。
*:按星号键执行逆序法还原魔方。
+:按加号键执行魔方传统的“层先法”进行还原。
R:顺时针90°转右面。
r:逆时针90°转右面。
U:顺时针90°转顶面。
u:逆时针90°转顶面。
L:顺时针90°转左面。
l:逆时针90°转左面。
D:顺时针90°转底面。
d:逆时针90°转底面。
F:顺时针90°转前面。
f:逆时针90°转前面。
B:顺时针90°转背面。
b:逆时针90°转背面。
M:向下转中层。
m:向上转中层。
X:顺着x轴转90°。
x:逆着x轴转90°。
Y:顺着y轴转90°。
y:逆着y轴转90°。
Z:顺着z轴转90°。
z:逆着z轴转90°。
2017/5/15 16:16:30 4MB 魔方 easyx 源码
1
共 981 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡