牛人编写聊天工具的心得

牛人编写聊天工具的心得

ID:25472045

大小:56.50 KB

页数:10页

时间:2018-11-20

牛人编写聊天工具的心得 _第1页
牛人编写聊天工具的心得 _第2页
牛人编写聊天工具的心得 _第3页
牛人编写聊天工具的心得 _第4页
牛人编写聊天工具的心得 _第5页
资源描述:

《牛人编写聊天工具的心得 》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、牛人编写聊天工具的心得[牛人编写聊天工具的心得]做一个聊天软件,首先要懂得网络通信的基础TCPIP,UDP之类的协议,还有socket编程,牛人编写聊天工具的心得。实现两台电脑之间的通信是非常简单的,对于UDP是无连接的传输层协议,不像TCP那样需要accept和connect什么的需要确保连接。但是UDP又是不可靠的,但是相对来说,我觉得对于即时聊天软件来说,使用udp还是足够的。于是我采用了UDP协议来贯穿我的软件。当然一般的不加修饰的Socket,只能实现同类网络地址下的通信,对于一个不同内网的计算机,将无法进行通信,这样也大大局限了我们软件的使用范围,所以

2、我采用了UDP下的NAT穿透技术来突破这一障碍,具体理论我们参照这篇文章。先谈谈整体的思想吧,这个即时聊天软件是以C/S构架的,服务器主要负责客户的信息转发,当然只是客户本身的IP、各种端口(消息监听,文件监听)、用户名之类的属性,他不直接参与客户之间的通讯,只有当客户之间需要nat穿透的时候才会通过服务器通知需要通信的一方向另一方发送打洞请求,另外还处理客户之间的登录和下线事件的广播,所以服务器的压力会比较小。  牛人编写聊天工具的心得[牛人编写聊天工具的心得]做一个聊天软件,首先要懂得网络通信的基础TCPIP,UDP之类的协议,还有socket编程,牛人编写聊

3、天工具的心得。实现两台电脑之间的通信是非常简单的,对于UDP是无连接的传输层协议,不像TCP那样需要accept和connect什么的需要确保连接。但是UDP又是不可靠的,但是相对来说,我觉得对于即时聊天软件来说,使用udp还是足够的。于是我采用了UDP协议来贯穿我的软件。当然一般的不加修饰的Socket,只能实现同类网络地址下的通信,对于一个不同内网的计算机,将无法进行通信,这样也大大局限了我们软件的使用范围,所以我采用了UDP下的NAT穿透技术来突破这一障碍,具体理论我们参照这篇文章。先谈谈整体的思想吧,这个即时聊天软件是以C/S构架的,服务器主要负责客户的信息

4、转发,当然只是客户本身的IP、各种端口(消息监听,文件监听)、用户名之类的属性,他不直接参与客户之间的通讯,只有当客户之间需要nat穿透的时候才会通过服务器通知需要通信的一方向另一方发送打洞请求,另外还处理客户之间的登录和下线事件的广播,所以服务器的压力会比较小。至于客户端,我采用了传统的聊天软件的惯用方式,一个主对话框,显示好友信息。出于减小难度,我只采用一个树控件来控制这些好友信息,而没有采用tab类型的控件,即使采用也是要花费一定的功夫去重写这些控件类,才能满足我们的要求。然后通过双击树控件的子项来弹出聊天对话框,说到这里我不得不说一下C++的确是高处C一大筹

5、,(封装、继承、多态)这是在是太帅了。创建这些聊天对话框时,将传入对应的客户IP、对话框指针、用户名(号码)等以用来正确识别。主程序运行就挂起一个消息监听线程,来循环监听从不同客户发来的消息,然后进行不同的处理,所以使用了较多的宏,吧来自不同客户的消息传给不同的本地聊天对话框处理,所以刚才说的在创建聊天对话框的时候的参数就非常重要了,处理不好可能会出现差错。诸多细节在这里还是比较难以细说。虽然采用了UDP传输协议,但是我通过消息回执来确保消息发送成功,这个回执将决定是否进行打洞处理。而在文件传输功能上的实现,采用了TCP传输层协议(我也不知道为什么自己就选择了这个,

6、估计是但是第一感觉需要accept和connect),我是在主程序运行时就挂起一个文件监听线程,当然这个监听端口是在程序运行是,没有登录服务器之前就首先动态获取的,我只是循环地查找没有被占用的端口并绑定套接字,心得体会《牛人编写聊天工具的心得》(..)。在有客户发来文件传送请求时,就创建一个文件接收和发送线程。感觉以上这些还是比较容易实现的。当然采用类的思想才会比较清晰,否则会比较乱。再讲讲其他一些小小细节,比如那个菜单的实现,如果采用对话框的默认菜单,我们都会觉得比较恶心,的确有点难看,所以我把对话框的菜单栏却掉了,然后添加了ON__NCHITTEST()消息,实

7、现无菜单的客户区拖动,然后重写个Button类来实现png图片的装饰,实现鼠标经过、悬停和按下的状态(就像qq的最小化和关闭按钮那样的效果),当然,我使用的是VC6开发的,不能直接使用GDI+,所以配置了一下才行(具体方法自己网上一查就知道了)。然后那个对话框的主背景,也是通过把一张png图片绘上去的,当然还要解决一些闪烁的问题,可以采用双缓冲来解决。在做界面的时候,我深感自己缺乏艺术细胞,ps技术实在太烂,做的按钮图片比较难看,颜色搭配和渐变效果实在难以控制。而文件实现拖拽发送也比较简单,增加个ON__DROPFILES()消息函数,对话框拓展属性勾上Acce

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。