没有合适的资源?快使用搜索试试~ 我知道了~
QQ聊天源代码 VC++编写
4星 · 超过85%的资源 需积分: 10 21 下载量 85 浏览量
2010-06-20
10:43:15
上传
评论 1
收藏 1.37MB DOC 举报
温馨提示
试读
64页
模拟QQ聊天软件 功能较完善和强大 包括登陆 好友列表 文件传输 实时聊天 视频通话等
资源推荐
资源详情
资源评论
综合实例一 多功能聊天程序
很多人都使用过腾讯公司的 QQ 软件,在这一章中我们将要利用 VC++6.0 来实现一个类
似 QQ 的聊天程序。QQ 发展到现在已经具有了很多功能,有文字聊天,语音聊天这样的基
本功能,也有视频聊天,手机短信,邮件,游戏等比较复杂的功能,但在这本程序中我们只
实现添加好友,文字聊天,文件传输和语音聊天 4 大功能。此章既是对前面知识的一个回顾,
也是介绍一种将几个单一功能模块组合成一个较复杂程序的简单方法。
1.1 程序总体设计
分析软件的功能要求:文字聊天、文件传输和语音聊天这三个功能都可以独立为一个
MFC 工程;增加实现类似 QQ 主界面的主程序工程,添加好友功能可在主程序中实现,同
时主程序还负责两端通信,协调调用相应模块。软件模
块结构如图 1-1 所示。
总体来说软件采用 C/S 结构进行设计,但是将文字
聊天、文件传输、语音聊天三个模块设计成可执行文件
进行调用,一个原因是这三个模块都可以独立实现,另
一个原因就是为了实现三个模块可同时被调用,如果将
三个模块都在主程序中实现,那么就需要进行复杂的线
程设计,并且每个模块都通过主程序进行通信,就会严
重限制同时可进行的操作。例如如果将三个模块都在主
程序中实现,只能同一好友进行语音聊天,同另一个好
友进行文件传输等少量的操作,因为对于线程的操作将要求在主程序中实现,而如果将三个
模块独立成可执行文件,则可以线程操作而由操作系统实现,可同时进行的操作的数量大大
增加。同时这样设计撇去 C/S 模式中的每个客户端的信息需要通过服务器中转的弊端,使得
每个用户面对的界面不受其是服务器还是客户端的影响,把主界面做成服务器,而对于相关
的功能做成客户端,用其他的.exe 文件处理发送给对方的服务器。主界面主要处理系统相关
简单的消息:添加好友,同意身份验证,同时调度所有的可执行文件处理相关事务。
这样设计的优点:
(1)客户端占用服务器的监听端口时间短,不会出现客户端因为服务器监听事件数量
不够而造成的连接不上的问题;
(2)调用每个可执行文件,目的明确,容易实现分工,同时容易调试和测试;
(3)每个可执行文件容易改写成.dll 的文件(腾讯公司的产品就是利用动态连接库实现
– 1 –
图 1-1 软件模块结构
计算机网络与安全实用编程
消息通信的),文件之间相对独立减轻服务器的负担;
(4)在软件编辑过程中没有使用太多的线程,思路清晰,有利于代码的读写,同时也
减轻了程序员的负担。
但同时这样做也存在着缺点:程序之间通过文件显式通信,文件内容未经加密,容易被
加以利用。如果不改变使用中转文件的方法,最好是对程序加以改进,对写入文件的内容进
行加密。
主程序使用 WinExec()函数调用其他可执行文件,但是此函数只单纯调用,功能模块与
主程序之间的如何进行沟通是一个必须解决的问题。在这里,我们使用一种简单的方法:即
主程序与其他模块之间通过文件进行交流,主程序将模块所需信息写入文件中,然后调用功
能模块的可执行文件,功能模块的可执行文件启动后从此文件中读取信息,这样就完成了两
者之间的沟通。
这是主程序与功能模块之间进行沟通的原理,但在具体实现的时候,文件中存储的信息
必须遵循一定的格式,在这里我们设计双方进行交流的信息格式为:
事件类型#对方 IP#对方用户名#数据#
并且在程序序中定义结构体 Message 来存储此信息,Message 结构体的定义如下:
struct Message //主界面之间的信息体
{int sign; //事件类型
char msg[1000]; //存储该格式中后面的所有信息
}msg;
下面对信息格式进行一下说明。
事件类型:文字聊天,文件传输,好友添加和语音聊天这 4 个功能都包括有两种状态—
—接受信息或者主动发送信息,在事件类型中通过一个数字来表示这些不同状态。 4 个功能
总共有八种状态,因此事件类型的取值为 0-7,其代表的状态如表 1-1 所示。
表1-1 事件状态及取值
取 值 状 态
0 发送文字信息
1 接收到文字信息
2 发送语音聊天请求
3 应答语音聊天请求
4 发送传输文件请求
5 应答传输文件请求
6 请求添加好友
7 接收到添加好友请求
对方 IP 和对方用户名:是指主程序通过这两部分将通信对象传递给功能模块,然后此
功能模块可直接跟对方进行通信,不必经过本方的主程序。对方 IP 和对方用户名可通过两
– 2 –
综合实例一 多功能聊天程序
种途径得到:一种是主动与对方通信,则主程序从好友列表中获取 IP 地址和用户名;另一
种是对方请求通信,发送的请求信息中包含有对方 IP 地址和用户名,则主程序从对方传递
的信息中解析出 IP 地址和用户名。
数据:这是一个可选项。这个部分只在进行文字聊天的时候存储聊天内容,在进行其他
操作的时候则省略。
下面举例说明介绍主程序与三个模块之间交流过程:主机 A 与主机 B 是通信双方,网
络设置如图 1-2 所示。
图 1-2 网络设置
(1)添加好友。此功能在主程序中实现,因此不需要中转文件。
图 1-3 描述了主机 A 将主机 B 添加为好友的全部过程。
图 1-3 添加好友的过程
由以上过程可以看出,主机 A 向主机 B 提出请求,成功后,主机 A 存储了主机 B 的信
息,但是主机 B 并没有主机 A 的信息,因此还要主机 B 向主机 A 提出申请才能得到主机 A
的信息。所以图 1-3 所示的添加好友的过程序要进行两次。双方成为好友后,就可以开始进
行其他的操作了。
(2)文字聊天。中转文件为“msg.txt”。
图 1-4 描述了主机 A 向主机 B 发送文字消息“aaa”的完整过程。
文字聊天过程中,聊天内容的发送由 Talk.exe 进行发送,但是聊天内容的接收由主程序
进行接收,因此 Talk.exe 在实现时只需确定发送信息的端口,不需要接收信息的端口。
(3)传送文件。中转文件为“file.txt”。
图 1-5 描述了主机 A 向主机 B 请求发送文件的过程。
从图 1-5 可以看到,在进行文件传输时,请求和回复请求阶段的信息传递是在两端的主
程序之间进行,同意发送文件后,则由两端的文件传输模块实现文件的发送和接收,不需要
– 3 –
计算机网络与安全实用编程
再经过主程序。
图 1-4 主机 A 向主机 B 发送文字消息的过程
图 1-5 主机 A 向主机 B 请求发送文件的过程
(4)语音聊天。中转文件为“voice.txt”。
图 1-6 描述了主机 A 向主机 B 请求语音聊天的过程。
– 4 –
综合实例一 多功能聊天程序
图 1-6 主机 A 向主机 B 请求语音聊天的过程
同文件传输一样,进行语音聊天时也只是在请求和回复请求阶段使用主程序进行通信,
然后交由两端的语音聊天程序进行通信。
上面的例子描述了软件各个功能的工作原理与流程。主程序间需要通信,各个模块之间
也需要通信,这就需要使用不同的端口,并且根据功能的不同,所使用的网络协议也有可能
不同,为了方便理解,在这里规定各工程的通信协议及使用端口,如表 1-2 所示。
表1-2 各工程的通信协议及使用端口
工程名 实现功能 使用协议 接收信息端口 发送信息端口
MainBord
主界面 Tcp/IP 协议
8001 8001
Speak
语音聊天 UDP 协议
5171 5172
Talk
对话 Tcp/IP 协议
8001
FileTransfer
传送文件 Tcp/IP 协议
800 800
下面开始介绍各个工程的具体实现原理与步骤。
1.2 文字聊天模块
我们先来实现文字聊天模块。这里实现的是一个完整的文字聊天程序,在第一章中就已
介绍过文字聊天程序一般实现原理与过程,使用 CSocket 类进行编程,Send 函数发送数据,
Receive 函数接收数据,这些细节都不再赘述。此程序与其他程序不同的是,需要与主程序
进行交互。此聊天程序所需要的功能仅仅是读取对方信息和发送己方信息,因此对其设计很
简单,主要实现步骤在 OnInitDialog 和 OnOk 两个函数中完成。
OnInitDialog 函数是对话框初始化函数,初始化变量,读取并解析“msg.txt”的内容。如
是发送信息给好友,则主程序得到好友 IP 地址和主机名,将其写入中转文件“msg.txt”中,
然后调用本程序,由 OnOk 函数连接好友,并发送聊天内容;如果是接收好友消息,主程序
– 5 –
剩余63页未读,继续阅读
资源评论
- yixuewo2013-07-31一般般,这玩意还是比较简单的
- jerry仔仔2013-02-20不错,有参考价值
zhycanfly
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功