为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 牛人编写聊天工具的心得

牛人编写聊天工具的心得

2018-03-09 3页 doc 14KB 13阅读

用户头像

is_353097

暂无简介

举报
牛人编写聊天工具的心得牛人编写聊天工具的心得 页眉文字 牛人编写聊天工具的心得 做一个聊天软件,首先要懂得网络通信的基础TCP\IP,UDP之类的协议,还有socket编程,牛人编写聊天工具的心得。实现两台电脑之间的通信是非常简单的,对于UDP是无连接的传输层协议,不像TCP那样需要accept和connect什么的需要确保连接。但是UDP又是不可靠的,但是相对来说,我觉得对于即时聊天软件来说,使用udp还是足够的。于是我采用了UDP协议来贯穿我的软件。当然一般的不加修饰的Socket,只能实现同类网络地址下的通信,对于一个不同内网的计算机,...
牛人编写聊天工具的心得
牛人编写聊天工具的心得 页眉文字 牛人编写聊天工具的心得 做一个聊天软件,首先要懂得网络通信的基础TCP\IP,UDP之类的协议,还有socket编程,牛人编写聊天工具的心得。实现两台电脑之间的通信是非常简单的,对于UDP是无连接的传输层协议,不像TCP那样需要accept和connect什么的需要确保连接。但是UDP又是不可靠的,但是相对来说,我觉得对于即时聊天软件来说,使用udp还是足够的。于是我采用了UDP协议来贯穿我的软件。当然一般的不加修饰的Socket,只能实现同类网络地址下的通信,对于一个不同内网的计算机,将无法进行通信,这样也大大局限了我们软件的使用范围,所以我采用了UDP下的NAT穿透技术来突破这一障碍,具体理论我们参照这篇文章。先谈谈整体的思想吧,这个即时聊天软件是以C/S构架的,服务器主要负责客户的信息转发,当然只是客户本身的IP、各种端口(消息监听,文件监听)、用户名之类的属性,他不直接参与客户之间的通讯,只有当客户之间需要nat穿透的时候才会通过服务器通知需要通信的一方向另一方发送打洞请求,另外还处理客户之间的登录和下线事件的广播,所以服务器的压力会比较小。至于客户端,我采用了传统的聊天软件的惯用方式,一个主对话框,显示好友信息。出于减小难度,我只采用一个树控件来控制这些好友信息,而没有采用tab类型的控件,即使采用也是要花费一定的功夫去重写这些控件类,才能满足我们的。然后通过双击树控件的子项来弹出聊天对话框,说到这里我不得不说一下C++的确是高处C一大筹,(封装、继承、多态)这是在是太帅了。创建这些聊天对话框时,将传入对应的客户IP、对话框指针、用户名(号码)等以用来正确识别。主程序运行就挂起一个消息监听线程,来 页脚文字 页眉文字 循环监听从不同客户发来的消息,然后进行不同的处理,所以使用了较多的宏,吧来自不同客户的消息传给不同的本地聊天对话框处理,所以刚才说的在创建聊天对话框的时候的就非常重要了,处理不好可能会出现差错。诸多细节在这里还是比较难以细说。虽然采用了UDP传输协议,但是我通过消息回执来确保消息发送成功,这个回执将决定是否进行打洞处理。而在文件传输功能上的实现,采用了TCP传输层协议(我也不知道为什么自己就选择了这个,估计是但是第一感觉需要accept和connect),我是在主程序运行时就挂起一个文件监听线程,当然这个监听端口是在程序运行是,没有登录服务器之前就首先动态获取的,我只是循环地查找没有被占用的端口并绑定套接字,心得体会《牛人编写聊天工具的心得》()。 ?分享好文?在有客户发来文件传送请求时,就创建一个文件接收和发送线程。感觉以上这些还是比较容易实现的。当然采用类的思想才会比较清晰,否则会比较乱。再讲讲其他一些小小细节,比如那个菜单的实现,如果采用对话框的默认菜单,我们都会觉得比较恶心,的确有点难看,所以我把对话框的菜单栏却掉了,然后添加了ON_WM_NCHITTEST()消息,实现无菜单的客户区拖动,然后重写个Button类来实现png图片的装饰,实现鼠标经过、悬停和按下的状态(就像qq的最小化和关闭按钮那样的效果),当然,我使用的是VC6开发的,不能直接使用GDI+,所以配置了一下才行(具体自己网上一查就知道了)。然后那个对话框的主背景,也是通过把一张png图片绘上去的,当然还要解决一些闪烁的问,可以采用双缓冲来解决。在做界面的时候,我深感自己缺乏艺术细胞,ps技术实在太烂,做的按钮图片比较难看,颜色搭配和渐变效果实在难以控制。而 页脚文字 页眉文字 文件实现拖拽发送也比较简单,增加个ON_WM_DROPFILES()消息函数,对话框拓展属性勾上Accept File就好了,剩下的就是处理路径的问题了,还有多个文件的同时拖拽问题。还有就是那个表情是比较难以处理的一个模块,当时就调试了我一个星期才解决,为了添加表情功能,我不得不放弃原来使用的EDIT控件(由于以前都只是使用EDIT),使用了RICHEDIT控件,使用该控件还是有很多细节要处理的,比如初始化才能使用啊什么的,当然为了实现表情的功能,我还是得重新写RICHEDIT这个类,拓展一下。因为我是使用转义码来实现的,每一个表情对应一个转义码,就像c语言中\n代表换行一样。重写的类中要实现,文本的添加和当文本改变时要处理一些诸如是否写入了转义码,超链接等等,至于那个表情布,只是一张小小的银白色的图片为底,然后再图片上分出很多个小小的矩形来容纳一个个小小的表情按钮,很多按钮吧,没错~每个小小的表情都是覆盖在按钮上的,同样要实现鼠标经过悬停和按下的事件,还得画一下那个蓝色的边框。总之这个表情功能的添加,我耗费较多的时间了,明白一点:微软提供的控件都是令我们不够满意的,我们得自己重写这些控件类,也就是继承他~(记得保存下来以后再用哦)。讲到这里,这个即时聊天软件的主要思想也介绍差不多了。提几点软件开发的体会,要注意代码的编写习惯,不要写那么多全局变量和外部变量(不到比不得以的话),注意内存的释放防止泄露,调试能力很重要(否则很多时候看卡你怎么不知所措)。 页脚文字 页眉文字 页脚文字
/
本文档为【牛人编写聊天工具的心得】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索