[MFC]项目:“小鸽”功能初步完成总结

  【小鸽】目前实现的基本功能包括:指定IP和端口进行连接、显示连接成功的IP、向指定的IP发送消息、接收来自其他小鸽的消息

 

  这个小项目,原先的计划是用一个月的时间完成消息发送和文件发送的功能,但是太高估自己的学习能力及毅力了,足足用了2个月的时间才完成这点点的功能,不能不说,我真TMD的牛了,能懒成这样,哎!好吧,我承认了,我很懒,不止懒,还很没毅力,遇到不懂的就逃避,完全的鸵鸟型人物啊~~~~

 

  首先,先说下我的基础。在开始这个项目前,我已快2年没有编程了,唯一一次完成一个完整的小项目时,就是毕业时的毕业设计了,毕业设计前,唯一一门认真学了一半的编程课就是C语言了,以及只学了点后来的C++课程,对编程有一点基础,真的就只有一点,对类概念不大,总的一句话就是一个小小小小菜鸟级人物(/(ㄒoㄒ)/~~实在觉得太对不起大学4年了,就这么耗了)。

 

  2个月前买了本C++基础书,啃了一半后,恳求死党给我布置了一个作业(╮(╯▽╰)╭ 米办法,我的定力,毅力,耐力,都太差了,我需要人监督,只能道一句:“师傅你太伟大了,这样气死师傅型的徒弟你也肯收!”)。但是当我听到要做一个类似【飞鸽】的项目时, bong~~~~~(没错,这是我听到后灵魂倒地的声音),丫~~~这样太难了吧!我这基础只能做个小问答题,排排序什么的,唰的~~一下给我那么难,还没开始我就怕了,真怕啊,完全没概念啊,就连要用什么知识我都不懂啊,我慌啊~~~~全身都斗。傲不过师傅,只能勉强上了,还好遇到了个好师傅,起码帮我把要用的知识点告诉我了,不用我瞎子摸象,要我先攻克TCP连接的socket使用了(/(ㄒoㄒ)/~~话说貌似大学有学过一门叫《中间件》的课程,里面有提过socket,但问题是我那门课勉强,勉强,真的是勉强才爬到及格的边缘,我真的对那么课有着无比的恐惧啊!里面天书式的内容,一点都看不懂),对socket一点概念都没,所以只能google一些socket列子,照抄进了VC++运行,逐步的掌握阻塞和非阻塞通信,在能跑通,并且server端和client端能通信时,进入了项目的开始阶段。

  

  项目使用“MFC工程”来编写,对MFC,我的概念只是停留在“微软基础类库,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数”。

  这个项目在编写前,师傅和我讨论了里面的类要做什么,类包含的各个方法;哈哈~~~~师傅不好意思,明明你已经帮我把类的构造好了,我编程的时候还是按照自己的想法,不断的改类的方法,只到最后变量满天飞的乱传递、静态变量的不断增加、类对象胡乱new(就是要用到类的方法时,不得不new对象出来),最后最后,连自己想要的变量都无法传的时候、想把Link对象保存起来时,才发现原来我又用了结构化编程方法,虽然项目里面有类,但是完全没有体现出面向对象方法的好处。果然吃了亏后,才发现面向对象的好处,在师傅的指引下,重构了类,把类 Link 定义在只用于通信,即:

  1)获取IP和Port后进行socke连接:bool clienConnect(CString IP,Int Port);

  2)负责接受其他小鸽同志发送过来的信息:CString revieceMessage(void);

  3)负责发送信息给其他小鸽同志:void sendMessage(CString sMessage);

  4)以及一个私有变量,用于保存每个对象中成功连接后的SOCKET: SOCKET p_Socket;

 其他功能都放到应用层,在这过程中,学到了:

  1)类中的方法就只实现他自己的功能部分,其他功能就由其他方法来实现,分工相当的明确;

  2)每次的连接都独立生成一个单独的对象,每个对象在需要连接时才生成,不像之前结构化编程时,只为了调用类中的方法才new一个对象,没有对对象有一个充分的理解;

  3)socket连接对象保存到私有变量中,只要把对象保存好了,就能获取到已经连接的socket,因为后续发送信息时,需要获取界面选中的IP后,向该IP发送信息;之前吃亏就是没发理解对象,没有办法把socke连接保存起来后续继续调用;

  4)对STL map的一个初步接触和使用,不得不说,map,你真伟大啊!!~~o(>_<)o ~~  泪奔啊~~~;

  5)线程的使用,【小鸽】需要作为一个server,绑定端口后侦听其他小鸽同志发送过来的连接,还要直接界面上的作为客户端的连接及显示等功能,因此使用了线程, 一个线程侦听,一个线程为界面上的操作;不得不说,MFC中使用线程,必须要为static或者Friend函数,这个我还没明白为何,需要后面继续学习理解;在者就是线程中传递多个函数时,需要通过结构来传递,呵呵~~本人笨,为了传递多个函数,可是我用了一天时间才google出来及能使用的。

  6)最纠结的就是界面层每个控件变量类型之间的转换,开始的时候真被折磨死,最后直接把项目变为“多字节字符集编译”才解决这个问题,但是界面变的不好看了,哎~~~~

 

   总结:编程前必须要把类构造好,不然后果不堪设想。这次重构后的代码,简单明了,自己看了都兴奋,也为自己能做出一个小功能高兴一会,啊哈哈哈哈~~~~~~没办法,我这是质的飞跃,从小小小小小菜鸟,变成了一个小小小小菜鸟,让我开心的疯一会吧。虽然项目还有很多防错还没有做,因为还在学习“异常”这块,需要点时间掌握,米办法,人笨,学起来的时间就比别人多,人笨又懒,那就悲剧了,直接是被师傅拿着鞭子抽着走,抽一鞭走一步,师傅辛苦你老人家了;这次其实收获最大的应该是不怕困难了,对后续要学的东西,不在像2个月前那样,听到不懂的就先逃了,还有着丝丝的兴奋!后续将补充传送文件的功能,希望能再这个月内做完,加油把!

  再此对伟大的师傅熊抱一个,师傅你太伟大了!

                                                  izzie_ou

                                                 2011.9.7

posted @ 2011-09-07 19:11  izzie_ou  阅读(238)  评论(1编辑  收藏  举报