CSocket 类是 CAsyncSocket 类的派生类,它最大的特点是提供了可以同 CArchive 和
CSocketFile 这两个类协同工作的接口。其中 CArchive 类是一个存档类,它是将用户的数据
保存为永久性存储对象的一种技术,在此它是用于同 CSocketFile 类相关联而提供数据传输文
件化的一种技术 。而 CSocketFile 类是一种特殊的文件对象,常用它来通过套接字进行数据的
传递,它所提供的接口同普通文件类的接口基本上是一致的 。也就是说,用户在使用 CSocket
类的时候,不必再像使用 CAsyncSocket 类时不得不面对一大堆繁琐的工作,而只需像读写一
·286 ·
…………………………………………………………Page 298……………………………………………………………
第 11 章 网络编程
般文件一样直接进行数据的读取就可以了。本章主要讲述网络编程,因此本小节主要介绍
CSocket 类,而 CArchive 类和 CSocketFile 类的相关信息请读者自行查阅相关资料。
1.CArchive 对象与串行化技术
CArchive 对象是 MFC 中专门帮助程序员处理归档对象的类,它最主要的作用就是把内
存中的数据保存到永久存储介质中,这样程序员就不必担心使用的到底是套接字还是文件了。
而为了实现 CArchive 与 CSocket 之间的连接,必须使用 CSocketFile 作为中间的转化媒质。
在实际工作中 CSocketFile 对象负责连接到一个 CSocket 对象,而 CArchive 对象负责管理缓
冲区。当发送归档对象的缓冲区被填满时,相关的 CSocketFile 对象会将缓冲区的内容取出,
并清空与套接字相关的归档缓冲区。当接收归档对象的缓冲区被填满时,CSocketFile 对象将
停止读出直到缓冲区可用。
2 .用 CSocket 类的编程步骤
用 CSocket 类进行网络编程的基本步骤如下。
o 构造服务器和客户机套接字对象。
o 调用 Create()函数创建套接字。
o 服务器调用 Listen() 函数监听客户机的连接请求;客户机调用 Connect()函数向服务器
发出连接请求。
o 服务器监听到客户机的连接请求时,先创建一个新的套接字,然后调用 Accept() 函数
接收客户机的连接请求。
o 服务器和客户机的套接字对象分别建立一个与之联系的 CSocketFile 对象。
o 服务器和客户机的套接字对象分别创建一个与 CSocketFile 相联系的 CArchive 对象,
以便进行数据传输。
o 使用 CArchive 对象在服务器和客户机套接字之间进行数据传输。
o 当任务完成后,销毁 CArchive、CSocketFile 和 CSocket 对象。
注意:由于 CArchive 对象只能单向传送数据,所以在实际使用的时候必须定义两个 CArchive 对
象,分别用于数据的发送和接收。
3 .CSocket 类的主要成员函数
CSocket 类是从 CAsyncSocket 类继承来的,除了 CAsyncSocket 类的成员函数,CSocket
类还主要有以下成员函数,如表 11…4 所示。
表 11…4 CSocket 类主要成员函数及说明
函数 说明
CSocket 构造一个 CSocket 对象
Create 创建一个 Socket
IsBlocking 确定一个阻塞调用是否在进行中
FromHandle 返回一个指向 CSocket 对象的指针,给出一个 Socket 句柄
Attach 将一个 Socket 句柄与一个 CSocket 对象连接
CancelBlockingCall 取消一个当前在进行中的阻塞调用
OnMessagePending 当等待完成一个阻塞调用时调用此函数来处理未处理的消息
·287 ·
…………………………………………………………Page 299……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
11。4 网络编程的实现
前面介绍了很多关于 Windows 网络编程的知识,也详细介绍了 WinSock 类。接下来,本
节将按照上小节所说的编程步骤,利用 CSocket 类编写一个网络聊天程序。相信通过这个程
序,读者会对 CSocket 的基本应用有更加深入的认识。
实例 11…1:网络聊天程序实例。源代码在光盘中“11实例 11…1”目录下。
11。4。1 程序设计的基本任务
为了让读者易于理解而又能体现出网络编程的一般步骤,本程序抛弃很多网络应用程序
的辅助功能,只实现网络聊天系统的基本功能。该系统包括服务器和客户端两部分,服务器
允许多个客户端连接,连接到服务器的客户端可以聊天,聊天的内容会在服务器和每个客户
端显示出来,同时,在服务器上还可以显示出每个客户端的基本信息,比如登录时间和 IP 等。
11。4。2 服务器端程序设计
1.设计概述
在进行服务器端程序设计之前,首先要考虑一下消息在程序中如何处理。在整个系统中,
服务器和客户端的交互都是通过消息完成的,并且对于一般的网络应用程序来说,网络数据
的有效封装有利于用户对网络通信的管理,也有利于在源程序的基础上作进一步的开发。因
此在本程序中,会对消息进行简单的封装。
接下来考虑界面设计 。服务器端应该有两个窗口,分别显示各客户端的详细信息(如用
户名、登录时间、IP 等)和用户的聊天信息。
关于程序流程在 11。3。2 节的第 2 小节已有说明。除此之外,在网络编程中还有很重要的
一点,就是服务器和客户端双方要约定好信息的格式以及发送顺序,只有约定好这些,双方
才知道对方所发信息的意义。其实这就是通常所说的协议的一个重要部分,在网络应用程序
的设计中,协议是必不可少的,越是大型的网络应用程序,协议就越复杂。对于本例这个很
小的程序,可以根据消息的类型(封装在消息类中)对消息进行分类,并且约定当用户登录
或离开时,都要先发送用户名给服务器,然后再发送正式信息。这样通过消息的种类,服务
器就能够知道当前消息是一般消息还是用户登录或离开的消息。如果是前者,就将其发送给
每个客户端,并且在服务器界面将信息显示出来;如果是后者,则将登录或离开的用户名发
送给各客户端,以使各客户端对用户列表更新,同时更新服务器端的用户列表。
最后,本程序采用文档…视图结构,视图负责显示,而数据的处理则通过文档类来实现。
2 .编写代码
(1)创建工程
新建一个 MFC 工程,取名为 ChatServer 。利用 AppWizard 创建 SDI 程序,在第一步中
·288 ·
…………………………………………………………Page 300……………………………………………………………
第 11 章 网络编程
选择“Single Document”项,在第四步中选中“Windows Sockets ”复选框,如图 11…2 所示。
在最后一步的“Base Class ”下拉列表中选择“ClistView ”作为基类,其他选项保持默认,单
击“Finish ”按钮即可完成工程的创建,如图 11…3 所示。
图 11…2 选中“Windows Sockets ”复选框 图 11…3 选择“ClistView ”作为基类
(2 )封装消息
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 其他
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 文学名著
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 魔法玄幻
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 魔法玄幻
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 都市言情
- 最新章:第28章