友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VC语言6.0程序设计从入门到精通-第108章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






    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 )封装消息
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!