C猜字游戏.doc_第1页
C猜字游戏.doc_第2页
C猜字游戏.doc_第3页
C猜字游戏.doc_第4页
C猜字游戏.doc_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C猜数游戏管理提醒: 本帖被 zhaoh 从 大学生开放式IT项目实战训练与竞赛专栏 移动到本区(2012-04-20) 本程序是让玩家输入数字与系统自动生成的数字进行比较,然后进行系统的提示进行下一步#include #include /*下面时间函数(time()的头文件*/ #include /*随机数函数,用到的头文件(rand()*/#include /*getch()用到的头文件*/#define N 20void gameover(int n)system (cls);if (n 7)if (1 = n)printf (你太神了吧!);printf (速度不错哟!nt恭喜你,你胜利了! 你花了%d次!, n);elseif(n 15)printf (速度勉勉强强!nt你花了%d次!, n);else if(nN) printf (你太慢了吧!加油哦。nt你花了%d此!, n);else printf(你太慢了!在%d次内未完成游戏,n);printf (n按任意键继续.);getch ();/*返回继续*/void play(int s2)int min,max;min=s0;max=s1;int inNum=0, gameNum=0, count=1;/*赋上初值, inNum是用户输入的数字,gameNum是游戏产生的随机数,count 计数用的*/ printf (t-欢迎使用猜数字游戏-n);srand (unsigned) time (NULL);/*这一步你可能看不懂,想知道的话,自己找资料,这是设置随机数的种子*/gameNum = rand()%(max - min) + min ;system (cls); /*清屏函数。*/ printf (t-欢迎使用猜数字游戏-n);while (count请输入数字: );scanf (%d, &inNum); if (inNum gameNum)printf(你输入的数字太大了。n); if (inNum 下限: );scanf (%d, &min);printf (t上限: );scanf (%d, &max);s0=min;s1=max;char choose()/菜单选择char c=0;/输入字符储存在c中printf(请选择菜单:n);printf(n1、进入游戏n2、游戏设置n3、游戏帮助n4、退出游戏n);c=getch();return c;/返回用户选择void help()/帮助信息显示printf(按提示菜单选择n);printf(开始游戏后玩家首先输入所猜数字上下限,然后系统随机生成一个数字n);printf(玩家从键盘输入数字,与系统生成的数字进行比较n);printf(若正确,系统会显示所猜次数并提示完成游戏n);printf(若不正确,玩家根据提示可能继续猜n);printf(在规定次数中还没猜出,游戏会强行终止。n);int main()int s2;int min=1,max=10;s0=min;s1=max;char c=0; mai1: /设置函数循环点c=0;system (cls);/清屏,play函数中已使用c=choose();/用户选择if(c=1)/1 调用play,进入游戏play(s);else if(c=2)set(s);/2 调用游戏设置函数 暂未编辑else if(c=3)help();/调用help,显示帮助信息else if(c=4)exit (0);/退出游戏elsegoto mai1;/输入其他字符则重运行函数,程序输出不变化printf(按任意键继续.);getch();goto mai1;/用户未退出则再次开始return 0;淘宝决策搜索引擎原理与设计(爬虫篇)淘宝网决策搜索引擎(完整图见附件)在淘宝网购物时,顾客最关心的就是这两个页面,因此这两个页面的信息对于顾客至关重要,这也是我的搜索引擎信息收集的地方。由于有成千上万的这样格式的页面,所以我的目标就是设计出一个爬虫引擎在淘宝网上不断地爬,以零下载为条件,直接将目标信息数据导入我创建的数据库中,再进行搜索。图1 商品货物信息页面图2 卖家信息页面图3 商品信息页面Html源码的关键地方综合分析这两个典型页面,我们可以得到这样的信息:大部分淘宝网的商品和店家信息都是依据这两个页面的格式形式存在的。所以依次便可以写出程序推断出整个淘宝网的数据。图4 商品信息表字段图5 卖家信息表字段图6 数据库表关系图我在网上详细查阅了有关爬虫引擎的资料和仔细挑选了开源框架后。决定使用以下几个框架作为我的爬虫引擎的主要框架。1. Html Parser这个开源框架主要用于解析Html格式的页面,这个框架的目的就是从当前页面将关键数据提取出来,从而在零下载的情况下得到数据。由于这个框架时间比较早,未免有些比较陈旧的做法,比如NodeList类没有实现Iterator接口,没有利用泛型等。以后的项目中可以替换为较新较成熟的框架。2. Apache Commons Chain在网页提取过程中,每个不同页面到底该用哪个类来负责解析呢?仔细分析后,我个人觉得使用【设计模式】中的责任链模式可以极大地降低代码耦合性,达到【软件工程】中开闭原则的效果。减少if else繁琐的判断,使代码更清晰。3. iBatis我经过对比,选择了iBatis作为DAO层的数据存储框架,由于其可以灵活的配置SQL语句,以及轻量级设计,可以让我使用一些数据库存储过程等维持外键的约束。4. Apache Commons Beanutils这个框架的BeanMap是一个很好的东西,它采用了一个反射的做法给我提供了一个可以将Map属性键值对转化为bean类的方法,利用这个类可以使页面提取出的Map中包含的数据用一个统一的方法转化为实体类,再存入数据库。图7 爬虫引擎程序流程图最终,得到了大量的淘宝网的商品和商家的数据库表中的数据,由于这个爬虫引擎利用“责任链模式”解析数据,可以灵活地扩展到其他不同结构的网页中去提取数据,在此基础上再实现搜索。(很抱歉,由于我下班后业余时间之作,时间仓促,全文搜索这部分未完成,考虑计划使用Apache Lucene开源框架做智能全文搜索框架)图8 成果展示:商品信息数据库表图9成果展示:卖家信息数据库表描述:淘宝决策搜索引擎原理与设计(爬虫篇)上传大文件设置方法打开php.ini,首先找到; File Uploads ;区域,有影响文件上传的以下几个参数:file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2M在; Data Handling ;区域,还有一项:post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M一般地,设置好上述四个参数后,上传8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得关心关心下面的参数:; Resource Limits ;max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒memory_limit = 8m ;每个PHP页面所吃掉的最大内存,默认8M把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了。好了,设置好现在就可以一试。点击一200大M的文件上传一下在你听歌、想MM或上厕所回来过程中,程序会告诉你上传成功啦在本机上测试上传200M的文件成功。给计算机系学生的建议原文来源:tombkeeper的和谐Blog/tombkeeper/blog/item/ab47442cafe4a1e98a1399b1.html作者: 周思博 (Joel Spolsky)虽然大概一两年前我还在夸夸其谈桌面应用程序是将来的潮流,大学生们现在还是偶尔向我请教职业发展的问题。所以我把我的建议写下来。以供学生们阅读,嘲笑,忽略。大多数锐气十足的学生从来不向前辈征求意见。在计算机科学领域,这样做是正确的。因为前辈们很可能说些“在2010年前,市场对于那些只会敲击键盘的代码工人的需求将会超过一亿(因此前景是乐观的)”,或者诸如“Lisp语言现在真的很热门”。我和那些前辈也差不多,当我给别人建议时,实际上我不知道自己在说些什么。我是如此的落后于时尚,以至于连AIM也搞不明白,而不得不使用 email(恐龙时代的产品,在那个时代,音乐是刻在扁扁的的圆圆的盒子上,噢,那种盒子叫cd)。(译者按:我认为祖儿这里在说反话,后文很多地方作者都在说反话,读者尽量理解这种美国式幽默吧。)所以你最好不要理睬我将要说的,你应该立刻去制作某种在线交友软件。然而,如果你喜欢编程,那就感谢上帝吧:你属于幸运的少数人,这些人喜欢工作,他们的工作可以保证他们能过上舒适的生活。大多数人没有这么幸运。对大多数人来说,工作是不愉快的,忍受工作的目的攒钱,是为了在年满65岁退休后能过上自己想过的生活。如果他们想过的生活不需要灵活的膝盖,明亮的眼镜,轻盈的脚步的话。现在让我回到主题,我将提供一些建议。好了,不罗嗦了,下面就是Joel给计算机系学生们七条免费的建议:1. 毕业前学会写作2. 毕业前学会C语言3. 毕业前学习微观经济学(microeconomics)4. 不要因为某些非计算机课程枯燥无趣就敬而远之5. 学习有大量编程实践的课程6. 不要担心工作都跑到印度去了7. 好好做夏季毕业实习让我逐条解释这些建议。但解释之前我要说明一下,如果因为这些建议是Joel的建议你就打算无条件地接受,以至于连我的理由都想跳过,那么你就太单纯,太容易被别人骗了。如果你是那种单纯的人,我还要给你第八条建议,找心理医生咨询一下如何培养自信(self-esteem)。毕业前学会写作如果Linus Torvalds不懂如何布道的话,Linux会成功吗? 正象每一个黑客,Linus精通写作,他知道如何准确地在email和邮件讨论组中使用书面英语表达自己的思想,所以他能够从全世界召集大量志愿者为Linux工作。你听说过最近风靡全世界的极限编程(Extreme Programming)吗? 即使你不懂什么是极限编程,你至少听说过这个词。为什么?因为宣传极限编程的人都是天才的作者和演说家。就看看你身边的那些小型的软件开发组织吧,最有权力和影响力的人是那些可以用自信,准确,舒适的英语交流的人。好吧,我承认这些人也许言过其实,但是你无可奈何。一个合格的程序员和一个伟大的程序员的区别不在于知道多少种编程语言,不在于他们是喜欢Python或者Java,而是在于他们是否擅长表达。他们能够说服,所以他们获得权力。他们能够写清楚明白的评论和接口文档,所以他们使得别人不用重写,而可以重用他们的代码,否则他们的代码就是毫无用处的。他们也能够写出清晰的用户手册,于是最终用户可以理解他们的代码是做什么用的,明白了他们的工作的价值。sourceforge埋葬着许多精美的代码,这些已死的代码无人使用,因为代码的作者很少写(或者根本不写)用户手册。我不会雇佣一个不懂写作的程序员。如果你擅长写,你就很容易找到工作,紧接着你就会被要求写技术规格文档,这意味着你已经被管理层注意到了。大学里有一些课程,要求你做很多的写作练习,不要犹豫,赶快参加这些课程。不要错过任何要求你每周或者每天练习写作的课程。给自己建立一个网络日志(weblog)。在上面写的越多,你会写地越容易。写地越容易,你就写地越多,这是一个正向地循环激励。毕业前学会C语言我可没有说是C+。虽然现在用C的工作不多,但是掌握各种编程语言的程序员事实上用C来交流(lingua franca);更重要的是,C比某些“现代”语言更接近机器语言。我不管现在大学里在教什么流行的垃圾语言(trendy junk),你至少得花一个学期接近机器。否则,你不可能使用高级语言写出高效的代码。这意味这你不会有机会写编译器或者操作系统,也许这是更好的编程工作;别人不会相信你能够为大项目设计架构。无论你知道多少高级的控制结构,知道如何进行错误处理,如果你不能解释为什么while (*s+ = *t+);的意思是进行字符串拷贝(而且对你而言这是世界上最自然,最易懂的代码),那么你就是在对编程一窍不通的状态下编程(programming based on superstition)。打个比方,就好比一个医生不懂基本的解剖学就给你开处方,如果你问这个医生为什么开这种药而不是那种药,他会说因为医药销售代表说这种药有用。毕业前学习微观经济学(microeconomics)我个人对经济学的一些理解:在经济学刚诞生的时候,它只是局限于有限的领域,在这些领域中人们发展和发现了很多有用的理论和很有趣的事实,这些理论和事实是从逻辑上是可以证明的。然后, 经济学开始走下坡路了。 “有限的领域”就是微观经济学,它对于商业可以进行有意义的指导。然后,事情就开始变糟了(以下部分你可以跳过),你接下来碰到的是讨论诸如失业率和银行利率之间关系之类东东的宏观经济学,很多时候宏观经济学讨论的理论都是无法证明正确或者错误的。接下来事态更加恶化了,经济学中的一些领域开始和物理学搭界,嗯,学习物理经济学也许你帮你在华尔街找到好工作。言归正传,无论如何请学习微观经济学,因为你需要知道什么是“供给和需求”,什么是竞争优势,什么是净现值(NPVs,Net Present Value,指项目经济寿命期内现金流入总和与现金流出总和之差额),什么是折扣和边际效用(discounting and marginal utility),如果你真想了解商业是如何运作的话。为什么计算机系的学生要学习经济学?因为理解商业基本规律的程序员对商业界来说是宝贵的程序员。我记得无数个程序员使我非常沮丧,因为他们在代码中坚持某些疯狂的设计,这些设计从技术上来说,完美;从资本主义的角度来看,发疯。如果你是一个理解商业的程序员,商业会给你回报。这就是你要学习经济学的原因。不要因为某些非计算机课程枯燥无趣就敬而远之首先,你需要让你的学分平均分(GPA)看起来漂亮点。不要低估学分平均分的威力。很多雇主和人事经理(包括我)阅读简历时首先看成绩,为什么?因为这代表了大部分的教授在很长的时期内对你的学业的一个平均的看法。托福成绩(美国的托福大致相对于我国的高考中的语文考试)?哈,几个小时的测验而已。当然学分不一定说明了一切,如果你修的是很难的课程,学分就有可能低一点。即使你的学分平均分很高,我还是要看各科分数是否一致。如果你应聘的是软件工程师职位,我为什么要关心你在大学里学的欧洲历史课程分数的高低呢?毕竟,历史很枯燥。那么要是你要编程的部分也是很枯燥的,你是不是要放弃了?事实上,有时候编程是枯燥的,如果你不能忍受编程中的枯燥部分的话,你就不能完成整个工作,雇主不愿意雇佣你这样的员工。我在大学里修过一门叫做“文化人类学”的课程,因为那时候我也搞不懂我到底要学什么,听起来这么课程可能还蛮有意思的。出乎我的意料。我不得不阅读大量讲述巴西热带雨林中的印第安人如何如何的书,让人真昏昏欲睡。听老师讲解也好不到哪去,我发觉看教室外的草如何长更有趣点。土著人如何烤蕃薯藤和我有什么关系?我为什么要去讨论如何烤蕃薯藤?但是期中考试马上就要到了,我暗暗下定决心,如果我能跨越“文化人类学”这个障碍,以后也许没有什么能难倒我了。我决心得A并且得到了A。以后当我不得不坐在林肯中心,连看18个小时的瓦格纳的尼伯龙根的指环时,我终于明白我为什么要学习“文化人类学”了,相比之下,我也能忍受这种歌剧了。学习有大量编程实践的课程我还记得决定不去读研究生的那一刻。就是在学习动态逻辑(Dynamic Logic)这门课的时候,我记得是耶鲁的Lenore Zuck(一个天才的教师)教的。修这门课的时候,我已经不再是雄心勃勃了。我可不指望在这么课程中得个A,我梦想的是混个及格。逻辑本质上是很简单的:如果结论正确,前提必须正确。例如,如果“所有读书好的人都能找到工作”并且“张三的读书好”,那么“张三能够找到好工作”。就这么简单。但是我要学的是动态逻辑, 动态逻辑和一般逻辑差不多,但是要考虑时间因素。例如,“在你开灯之后,你可以看见你的鞋子”加上“过去灯被打开了”意味着“你现在可以看到你的鞋子”动态逻辑学对于象Zuck教授这样的天才理论家来说非常诱人,因为这门学科的知识也许可以用来证明计算机程序是否正确。我记得在第一堂课上,为了证明“如果你有一盏关着的灯”并且“你按了一下开关”,那么“现在灯亮了”,Zuck教授就使用了两黑板加上边上的墙壁。证明过程难以置信的复杂。我觉得如此复杂的证明过程很可能会有小错误,但是我没办法证明证明过程本身是正确的。事实上,写在黑板上的证明跳过了很多中间步骤,许多步的证明使用了演绎法,使用了归纳法,以及一些研究生才懂的证明方法。作为课后作业,我们需要证明以下命题:如果灯过去是关着的,并且现在它是开着的,请证明有人按了开关我真的试着证明它了。我花了许多小时,试图证明这个命题。在无数个小时的努力后,我发觉Zuck博士的原始的证明有一个逻辑上的错误,也许这个错误是我的笔记抄错了,我不知道。于是我终于认识到,如果为了证明一个简单的问题需要花三个小时写下几黑板的证明步骤,再考虑到这个漫长的证明过程中可能会引入种种错误,那么这种机制是不可能用来证明任何有趣的东西的。对动态逻辑学家来说,有用是无关紧要的。于是我退出了那门课程,发誓永远不会去读计算机系的研究生。这个故事的主题是,计算机科学和软件开发不一样。如果你非常非常幸运,你的学校会开软件开发的课程。然而,他们也可能不开这样的课程,因为名牌大学认为教授实用技巧的事情应该留给那些二三流的技术学院或者某些释放犯人再安置计划。你可以在任何地方学习编程,我们是耶鲁大学,我们培养未来的世界领导人。你付给耶鲁16万美元的学费就是为了学习如何写循环语句吗?你把耶鲁当成什么地方了?Java速成班吗?哼。问题在于,我们没有一个专业的学校教授软件开发。所以如果你想成为一个程序员,你可以进计算机系读书(当然计算机科学也值得学习),但是你学的不是软件开发。如果走运的话,你可以在计算机系发掘出很多有大量编程实践的课程,就象你能在历史系找到很多提供写作水平的课程一样。这些课程绝对值得学习。如果你喜欢编程,不要为你不能上教授诸如lambda算子或者线性代数的课程沮丧,在那里你连摸一下计算机的机会都没有。找找看有没有名字中带有“实习(Practicum)”字样的课程,不要在乎Practicum是个拉丁语。有用的(无奈状)课程就是需要在课程名中塞一些拉丁语,才能从那些装模作样(Liberal Artsy Fartsy)管理层的眼前蒙混过关。不要担心工作都跑到印度去了啊哈,如果你人在印度,你就无所谓了。愿你享受外包带来的工作机会并顺祝身体健康。但是我听说现在愿意读计算机系的学生越来越少了。据说原因之一是工作机会都跑到印度去了。我认为这种观点是大错特错。首先,根据眼前的商业时尚选择事业是非常愚蠢的。其次,即使工作真的都跑到印度和中国去了,编程对于其他有趣的工作来说都是极好的训练,例如业务流程工程(business process engineering)。第三,无论是在美国还是印度,好程序员仍然是非常短缺的,请相信我。当然,现在有许多所谓搞IT的人吵吵嚷嚷地说就业形势不好,工作太难找。但是事实如何?恕我直言,好程序员找工作还是很容易。第四,你还有更好的主意吗?历史系的毕业生找工作更容易吗?去法学院如何?据我所知,99的律师恨他们的工作,每分钟都恨。而且律师一周工作90小时。正象我以前说过的,如果你喜欢计算机,那么感谢上帝,你将属于全世界人中的极少数的幸运儿,这些幸运儿热爱他们的工作,而且工作也可以提供体面的收入。实际上,我也不认为报考计算机系的人越来越少有多大的意义。相对于internet泡沫时期大家都疯狂的往计算机系挤,现在的人数回落只是回归正常水平而已。在泡沫时期,我们这个行业涌入了许多对计算机毫无兴趣的南郭先生,他们梦想的是拿着高的吓人的薪水加诱人的期权,然后年轻退休。谢天谢地,现在这些人都跑了。好好做夏季毕业实习明智的招聘者知道热爱编程的人初中就为当地的牙医写数据库程序,高中就在计算机夏令营教课,为校报规划网站,在某个软件公司做实习。他们找的就是这样的人。如果你喜欢编程,你最容易犯的最大的错误就是“有活就接”。我知道,其他专业的学生假期打工可顾不了这些条条框框。但是你不一样,你拥有一种特殊技能,不要浪费它。当你毕业时,你的简历上应该已经罗列一堆的编程工作实习。让其他人去“为大家提供租车服务”(Tom Welling是个例外,他业余时间去演超人)。最后,为了让你的生活更容易一点,也为了说明我这篇文章是能够自圆其说的,我将给我自己的公司的做做广告。我的公司Fog Creek软件公司,可以为大学生提供软件开发方面的实习机会。在我们公司,你可以学习“编码,开发,商业”。去年在我们公司实习的Ben就是这么说的,可不是因为我给他什么好处他才这么说。二月一号截至,抓紧机会吧。如果你听了我的建议,你就会太早地卖掉Microsoft公司的股票,拒绝Google提供的职位,原因是因为你已经拥有自己的公司了。到时候可别后悔,更别怪我,呵呵。32位Windows中有关串口操作介绍1.打开串口:在Window下串行口作为文件处理,使用文件操作对串行口进行处理。使用CreateFile()打开串口,CreateFile()将返回串口的句柄。HANDLE CreateFile(LPCTSTR lpFileName, / pointer to name of the fileDWORD dwDesiredAccess, / access (read-write) modeDWORD dwShareMode, / share modeLPSECURITY_ATTRIBUTES lpSecurityAttributes, / pointer to security attributesDWORD dwCreationDistribution, / how to createDWORD dwFlagsAndAttributes, / file attributesHANDLE hTemplateFile / handle to file with attributes to copy);lpFileName: 指明串口制备,例:COM1,COM2dwDesiredAccess: 指明串口存取方式,例:GENERIC_READ|GENERIC_WRITEdwShareMode: 指明串口共享方式lpSecurityAttributes: 指明串口的安全属性结构,NULL为缺省安全属性dwCreateionDistribution: 必须为OPEN_EXISTINdwFlagAndAttributes: 对串口唯一有意义的是FILE_FLAG_OVERLAPPEDhTemplateFile: 必须为NULL2.关闭串口:CloseHandle(hCommDev);3.设置缓冲区长度:BOOL SetupComm(HANDLE hFile, / handle of communications deviceDWORD dwInQueue, / size of input bufferDWORD dwOutQueue / size of output buffer);4.COMMPROP结构:可使用GetCommProperties()取得COMMPROP结构,COMMPROP结构中记载了系统支持的各项设置。typedef struct _COMMPROP / cmmpWORD wPacketLength; / packet size, in bytesWORD wPacketVersion; / packet versionDWORD dwServiceMask; / services implementedDWORD dwReserved1; / reservedDWORD dwMaxTxQueue; / max Tx bufsize, in bytesDWORD dwMaxRxQueue; / max Rx bufsize, in bytesDWORD dwMaxBaud; / max baud rate, in bpsDWORD dwProvSubType; / specific provider typeDWORD dwProvCapabilities; / capabilities supportedDWORD dwSettableParams; / changeable parametersDWORD dwSettableBaud; / allowable baud ratesWORD wSettableData; / allowable byte sizesWORD wSettableStopParity; / stop bits/parity allowedDWORD dwCurrentTxQueue; / Tx buffer size, in bytesDWORD dwCurrentRxQueue; / Rx buffer size, in bytesDWORD dwProvSpec1; / provider-specific dataDWORD dwProvSpec2; / provider-specific dataWCHAR wcProvChar1; / provider-specific data COMMPROP;dwMaxBaud:BAUD_075 75 bpsBAUD_110 110 bpsBAUD_134_5 134.5 bpsBAUD_150 150 bpsBAUD_300 300 bpsBAUD_600 600 bpsBAUD_1200 1200 bpsBAUD_1800 1800 bpsBAUD_2400 2400 bpsBAUD_4800 4800 bpsBAUD_7200 7200 bpsBAUD_9600 9600 bpsBAUD_14400 14400 bpsBAUD_19200 19200 bpsBAUD_38400 38400 bpsBAUD_56K 56K bpsBAUD_57600 57600 bpsBAUD_115200 115200 bpsBAUD_128K 128K bpsBAUD_USER Programmable baud rates availabledwProvSubType:PST_FAX 传真设备PST_LAT LAT协议PST_MODEM 调制解调器设备PST_NETWORK_BRIDGE 未指定的网桥PST_PARALLELPORT 并口PST_RS232 RS-232口PST_RS422 RS-422口PST_RS423 RS-432口PST_RS449 RS-449口PST_SCANNER 扫描仪设备PST_TCPIP_TELNET TCP/IP Telnet协议PST_UNSPECIFIED 未指定PST_X25 X.25标准dwProvCapabilitiesPCF_16BITMODE 支持特殊的16位模式PCF_DTRDSR 支持DTR(数据终端就绪)/DSR(数据设备就绪)PCF_INTTIMEOUTS 支持区间超时PCF_PARITY_CHECK 支持奇偶校验PCF_RLSD 支持RLSD(接收线信号检测)PCF_RTSCTS 支持RTS(请求发送)/CTS(清除发送)PCF_SETXCHAR 支持可设置的XON/XOFFPCF_SPECIALCHARS 支持特殊字符PCF_TOTALTIMEOUTS 支持总(占用时间)超时PCF_XONXOFF 支持XON/XOFF流控制标准RS-232和WINDOW支持除PCF_16BITMODE和PCF_SPECIALCHAR外的所有功能dwSettableParamsSP_BAUD 可配置波特率SP_DATABITS 可配置数据位个数SP_HANDSHAKING 可配置握手(流控制)SP_PARITY 可配置奇偶校验模式SP_PARITY_CHECK 可配置奇偶校验允许/禁止SP_RLSD 可配置RLSD(接收信号检测)SP_STOPBITS 可配置停止位个数标准RS-232和WINDOW支持以上所有功能wSettableDataDATABITS_5 5个数据位DATABITS_6 6个数据位DATABITS_7 7个数据位DATABITS_8 8个数据位DATABITS_16 16个数据位DATABITS_16X 通过串行硬件线路的特殊宽度路径WINDOWS 95支持16的所有设置5.DCB结构:typedef struct _DCB / dcbDWORD DCBlength; / sizeof(DCB)DWORD BaudRate; / current baud rate指定当前的波特率DWORD fBinary: 1; / binary mode, no EOF check指定是否允许二进制模式,WINDOWS 95中必须为TRUEDWORD fParity: 1; / enable parity checking指定奇偶校验是否允许DWORD fOutxCtsFlow:1; / CTS output flow control指定CTS是否用于检测发送控制。当为TRUE是CTS为OFF,发送将被挂起。DWORD fOutxDsrFlow:1; / DSR output flow control指定CTS是否用于检测发送控制。当为TRUE是CTS为OFF,发送将被挂起。DWORD fDtrControl:2; / DTR flow control typeDTR_CONTROL_DISABLE值将DTR置为OFF, DTR_CONTROL_ENABLE值将DTR置为ON, DTR_CONTROL_HANDSHAKE允许DTR握手,DWORD fDsrSensitivity:1; / DSR sensitivity 当该值为TRUE时DSR为OFF时接收的字节被忽略DWORD fTXContinueOnXoff:1; / XOFF continues Tx指定当接收缓冲区已满,并且驱动程序已经发送出XoffChar字符时发送是否停止。TRUE时,在接收缓冲区接收到缓冲区已满的字节XoffLim且驱动程序已经发送出XoffChar字符中止接收字节之后,发送继续进行。FALSE时,在接收缓冲区接收到代表缓冲区已空的字节XonChar且驱动程序已经发送出恢复发送的XonChar之后,发送继续进行。DWORD fOutX: 1; / XON/XOFF out flow controlTRUE时,接收到XoffChar之后便停止发送接收到XonChar之后将重新开始DWORD fInX: 1; / XON/XOFF in flow controlTRUE时,接收缓冲区接收到代表缓冲区满的XoffLim之后,XoffChar发送出去接收缓冲区接收到代表缓冲区空的XonLim之后,XonChar发送出去DWORD fErrorChar: 1; / enable error replacement该值为TRUE且fParity为TRUE时,用ErrorChar 成员指定的字符代替奇偶校验错误的接收字符DWORD fNull: 1; / enable null strippingTRUE时,接收时去掉空(0值)字节DWORD fRtsControl:2; / RTS flow controlRTS_CONTROL_DISABLE时,RTS置为OFFRTS_CONTROL_ENABLE时, RTS置为ONRTS_CONTROL_HANDSHAKE时,当接收缓冲区小于半满时RTS为ON当接收缓冲区超过四分之三满时RTS为OFFRTS_CONTROL_TOGGLE时,当接收缓冲区仍有剩余字节时RTS为ON ,否则缺省为OFFDWORD fAbortOnError:1; / abort reads/writes on errorTRUE时,有错误发生时中止读和写操作DWORD fDummy2:17; / reserved未使用WORD wReserved; / not currently used未使用,必须为0WORD XonLim; / transmit XON threshold指定在XON字符发送之前接收缓冲区中可允许的最小字节数WORD XoffLim; / transmit XOFF threshold指定在XOFF字符发送这前接收缓冲区中可允许的最小字节数BYTE ByteSize; / number of bits/byte, 4-8指定端口当前使用的数据位BYTE Parity; / 0-4=no,odd,even,mark,space指定端口当前使用的奇偶校验方法,可能为:EVENPARITY,MARKPARITY,NOPARITY,ODDPARITYBYTE StopBits; / 0,1,2 = 1, 1.5, 2指定端口当前使用的停止位数,可能为:ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITSchar XonChar; / Tx and Rx XON character指定用于发送和接收字符XON的值char XoffChar; / Tx and Rx XOFF character指定用于发送和接收字符XOFF值char ErrorChar; / error replacement character本字符用来代替接收到的奇偶校验发生错误时的值char EofChar; / end of input character当没有使用二进制模式时,本字符可用来指示数据的结束char EvtChar; / received event character当接收到此字符时,会产生一个事件WORD wReserved1; / reserved; do not use 未使用 DCB;6.改变端口设置使用如下的两个方法BOOL GetCommState(hComm,&dcb);BOOL SetCommState(hComm,&dcb);7.改变普通设置BuildCommDCB(szSettings,&DCB);szSettings的格式:baud parity data stop例: baud=96 parity=n data=8 stop=1简写:96,N,8,1szSettings 的有效值baud:11 or 110 = 110 bps15 or 150 = 150 bps30 or 300 = 300 bps60 or 600 = 600 bps12 or 1200 = 1200 bps24 or 2400 = 2400 bps48 or 4800 = 4800 bps96 or 9600 = 9600 bps19 or 19200= 19200bpsparity:n=nonee=eveno=oddm=marks=spacedata:5,6,7,8StopBit1,1.5,28.COMMCONFIG结构:typedef struct _COMM_CONFIG DWORD dwSize;WORD wVersion;WORD wReserved;DCB dcb;DWORD dwProviderSubType;DWORD dwProviderOffset;DWORD dwProviderSize;WCHAR wcProviderData1; COMMCONFIG, *LPCOMMCONFIG;可方便的使用BOOL CommConfigDialog(LPTSTR lpszName,HWND hWnd,LPCOMMCONFIG lpCC);来设置串行口。9.超时设置:可通过COMMTIMEOUTS结构设置超时,typedef struct _COMMTIMEOUTS DWORD ReadIntervalTimeout;DWORD ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutConstant;DWORD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutConstant; COMMTIMEOUTS,*LPCOMMTIMEOUTS;区间超时:(仅对从端口中读取数据有用)它指定在读取两个字符之间要经历的时间总超时: 当读或写特定的字节数需要的总时间超过某一阈值时,超时触发.超时公式:ReadTotalTimeout = (ReadTotalTimeoutMultiplier * bytes_to_r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论