- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
聊天工具
功能说明:
聊天程序由两大部分组成:服务器端聊天程序和客户端聊天程序。服务器端聊天程序负责接收来自客户端的聊天信息,并且根据客户端的要求把这些信息转发给另外一个人或多个聊天客户。客户段聊天程序则负责建立和维护与服务器端的连接,向服务器发送本客户的聊天内容,同时从服务器接收对方的响应。
先启动服务器端聊天程序,这时聊天程序需要制定一个端口号,客户端则根据这个端口号以及服务器的网址与服务器进行通信。在这里,把端口号称为“聊天频道”。
在后面的程序代码分析中将会看到,端口号并不等同于聊天频道,而是在聊天频道上增加一个固定的偏移值,使得这个聊天频道不会和系统保留的端口发生冲突。
服务器启动后将在这个指定的端口中等待客户的链接。对于公共聊天室,服务器对客户的数目不做任何限制。而对于私人聊天室,每个聊天频道则只能允许两个客户互相连接,使得一方发送的信息只能到达对方的主机中。这里的服务器提供的是公共聊天服务。
客户端聊天程序启动时,首先需要与聊天服务器建立连接,这就需要知道聊天服务器的网址及聊天频道。聊天服务器都有公开的服务器地址供用户连接。聊天频道则类似于一个个分组,一群爱好相同的人可以选择相同的聊天频道,因而不会受到自己不想要的信息。客户段聊天程序的主窗口分为两个部分:上半部分用来显示来自对方的聊天信息,下半部分用作信息输入窗口。
第一部分 服务器端聊天程序
一、设计思想和功能
服务器端聊天程序必须要能做三件事:
1、服务器端聊天程序要在特定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,已记录所有成功的链接。
2、服务器端聊天程序要及时接收从各个聊天客户发来的信息,然后把这些信息转发到一个或多个客户连接。对于公共聊天室,服务器将把接收到的信息向除源端外的所有客户发送过去。
3、服务器还要监控这些连接的状态,在客户主动离开或发生故障时从列表中删除相应表项,并及时更新连接表。
这些要求可以通过CSocket类提供的功能实现。从CSocket派生出两个类:CListenSocket和CClientSocket,他们分别用来侦听客户的连接请求和建立与客户的连接。服务器只需要一个侦听套接字CListenSocket,然后根据客户的连接请求动态创建客户套接字CClientSocket。客户套接字的数量是不可预知的,因此需要一个列表来记录。MFC的CPtrList类就能实现这种功能。
二、程序设计与框架
(1)、用MFC AppWizard(exe)创建一个新工程,命名为聊天工具
(2)、在MFC AppWizard中按照下述步骤设置工程属性:
1)、设置应用程序类型为单文档模式,选择“文档/查看体系结构支持”复选框。
2)、不选择数据库支持。
3)、不选中“ActiveX 控件”复选框。
4)、不选中“隐藏工具栏”和“打印和打印预览”复选框,选择Windows Sockets复选框。
5)、默认。
6)、设置CView类为CEditView,单击“完成”按钮,应用程序聊天工具就创建完成了。
(3)、插入一个对话框IDD_DIALOG_CHANNEL,编辑各个控件的属性如下(用该资源创建对话框类CChannelDlg):
资源标识
标题
相关属性/事件
IDD_STATIC
聊天频道
IDC_EDIT_CHANNEL
CString m_channel
IDCANCEL
取消
IDOK
确定
IDD_DIALOG_CHANNEL
设置
CChannelDlg
(4)、打开菜单编辑器菜单IDR_MAINFRAME,设置菜单命令如下:
资源标识
标题
命令处理函数
ID_FILE_START
启动服务(S)……\tCtral+S
CMyDoc::OnFileStart
三、程序代码
1、CChanneiDlg类的定义和实现部分
1)头文件ChannelDlg.h,定义CChanneiDlg的基类CDialog。
class CChannelDlg : public CDialog
{
public:
CChannelDlg(CWnd* pParent = NULL); // standard constructor
enum{IDD=IDD_DIALOG_CHANNEL};
CString m_channel;
protected:
virtual void DoDataExchange(CDataExchange* pDX); //DDX DDV support
protected:
DECLARE_MESSAGE_MAP()
};
2、在ChannelDlg.cpp中,类的CChannelDlg的实现部分。在这里主要定义CChannelDlg的构造函数,初始化聊天频道。
//CChannelDlg的构
您可能关注的文档
- 第三章 社会主义苏联模式在国际上的推广.ppt
- 第三章 外汇与汇率练习答案.doc
- 第三章第五节水景工程.ppt
- 第三章公共部门绩效管理.ppt
- 第三章自然美.ppt
- 第十二单元 教育(四).ppt
- 第十二讲 股份公司.ppt
- 第十二章 离合器.ppt
- 第十三讲 银行保函.ppt
- 第十三章 色彩基础知识.ppt
- DB44_T 2611-2025 城市排水管网有毒有害气体监测与风险分级管理技术标准.pdf
- DB44_T 2612-2025 竞赛类科普活动策划与实施服务规范.pdf
- DB43_T 2947-2024 烟草种子质量控制规程.pdf
- DB37_T 4836-2025 煤矿风量实时监测技术要求.pdf
- 叉车防撞系统,全球前22强生产商排名及市场份额(by QYResearch).docx
- 超滤膜,全球前18强生产商排名及市场份额(by QYResearch).docx
- DB62T 4172-2020 玉米品种 酒623规范.pdf
- DB62T 4160-2020 在用真空绝热深冷压力容器综合性能在线检测方法.pdf
- DB62T 4164-2020 辣椒品种 酒椒1号.pdf
- DB62T 4133-2020 公路隧道地质超前预报机械能无损探测技术规程.pdf
文档评论(0)