vc高级程序设计大作业_基于局域网的聊天室设计与开发内容摘要:

FC 给出了 CSocket类,这个类继承 于 CAsyncSocket 类,它提供了比 CAsyncSocket 更高层的 WinSock API 接口。 相比起来, CSocket 类代表了一个比 CAsyncSocket 对象更高层次的 Windows Socket的抽象, CSocket 类与 CSocketFile 类和 CArchive 类一起工作来发送和接收数据, 除此之外CSocket 类和 CSocketFile 类可以与 Carchive 类一起合作来管理发送和接收的数据,这使管理数据收发更加便利 , 因此使 用 CSocket 类编写网络应用程序更加方便。 但是它牺牲掉了北京信息科技大学 6 CAsyncSocket 类 的灵活性。 同时 CSocket 对象提供阻塞模式, 所谓 阻塞 是指 直到操作完成后才返回控制权 , 在完成操作返回之前 进程被挂起, 什么也不能做。 常见的阻塞函数有 Receive()、 Send()、ReceiveFrom()、 SendTo() 和 Accept()。 假如 一个 socket 处于非阻塞模式(即异步操作),则会被调用函数立即返回 ,通信效率较高。 对于 CAsyncSocket 类可以用 GetLastError 成员函数查询最后的错误,如果错误 返回值为 WSAEWOULDBLOCK, 则说明有阻塞,而CSocket 绝不会返回 WSAEWOULDBLOCK, 因为它在自己类的内部已经实现了阻塞管理,减轻了程序员负担,但是却牺牲了通信的高效性。 是不是使用 CSocket 类就不能实现类 似 CAsyncSocket 类 的高效非阻塞操作呢。 也不是,使用使用 多线程的方法既可以使程序员享受 CSocket 带来的简化编程的便利,也不会影响用户界面对用户的反应 ,可谓一举两得。 综合上述各个因素以及两个类的特点可以得知, 如果需要低层控制和高效率,就使用CAsyncSock 类;如果需要方便,则可使用 CSocket 类 ;如果既想编程方便又想高效率通信,则可以联合使用 CSocket 类和多线程编程 [4]。 类编程模型 当我们在 使用 CSocket 对象 编写网络通信应用程序时候,需要 涉及 到 CArchive 类 和CSocketFile 类对象。 以下介绍的针对字节流型套接字 CSocket 类编程模型的实现过程 中,服务器方和客户方的实现过程几乎没有什么差异,唯一的区别仅在 第 2 步。 1. 使用 CSocket 类产生一个 对象 ,然后调用 CSocket 类对象的成员函数 Create()产生一个 Socket 句柄。 这个过程 对于数据报套接字, CAsyncSocket 和 CSocket 的使用方法没有什么区别。 2. 在这里,我们要分服务器与客户端区分对待。 假如第一步创建的是 客户方套接字,调用 CSocket 类的基类成员函数 CAsyncSocket ∷ Connect() 来与 服务方套接字连接; 反之, 如果 在前面我们创建的是 服务方套接字, 那么就要开始监听,相应的 调用 基类的成员函数 CAsyncSocket∷ Listen()开始监听来自客户方的连接请求, 当服务器方正确收到客户方的 连接请求后, 服务器方 调用 CAsyncSocket∷ Accept( )成员函数来响应 接受请求,并且 建立连接。 同样地, Accept()成员函数 的参数为 一个新的并且为空的 CSocket 对象。 3. 接着我们就需要构造一个 CSocketFile 对象, 并且将 它与 CSocket 对象 关联起来 ,以便供后面的通信使用。 北京信息科技大学 7 4. 在完成前面一些列的准备工作后,我们就要正式开始接收和发送数据了。 为了完成这个工作,首先我们 为接收和发送数据 各构建 一个 CArchive 对象, 与此同时将 它们与 上面构造的 CSocketFile 对象 也 关联起来。 在这里我们需要特别注意的是, CArchive 类 是不能和数据报套接字一起工作 ,实现数据接收和发送 的。 5. 在客户与服务方 使用 CArchive 对象的 Read()、 Write()等函数传送 、接收 数据。 6. 当服务方和客服方结束双方的通信后 , 完成一系列的清理工作,具体工作 是先后 销毁 CArchive、 CSocketFile 和 CSocket 对象 []。 的聊天室 设计 系统总体目标 服务器端: 1. 服务器端可以设置开放的端口,并且可以自动检查端口是否设置的正确; 2. 服务器端可以自动获取本机的 IP 地址和主机名称; 3. 服务器器可以自动监听开放的端口,看是否有客户端连接; 4. 聊天区的信息可以自动换行,可以使用回车键发送信息; 5. 服务器端可以自动获取连接客户端的基本信息; 6. 服务器端可以统计在线的客服端,以及相应的信息; 客户端: IP 地址和端 口,同时客户端可以设置自己的昵称; ,可以自动检查端口和 IP 地址是否正确,如果不正确,能给出提示信息; ,能提示用户相应的信息。 系统功能模块图 系统包括客服端程序和服务器端程序,服务器端包括:( 1)设置 IP 地址和端口模块;( 2)北京信息科技大学 8 监听模块;( 3)聊天模块;( 4)统计在线人数模块;( 5)退出模块。 客户端包括:( 1)连接模块;( 2)聊天模块;( 3)退出模块。 具体功能模块示意图见图 2 所示。 基 于 局 域 网 的 聊 天 室服务器客服端连接服务器聊天模块退出模块设置I P地址和端口监听端口聊天模块统计在线人数模块退出模块 图 2 系统功能模块图 的聊天室 实现 服务器开启与客户连接以及局域网通信 在 TCP/IP 网络应用中,通信的两个进程间相互作用的主要模式是客户机 /服务器模式(client/server),客户机 /服务器模式在操作过程中采取的是主动请求的方式,即客户向服务器提出请求,服务器接收到请求后,提供相应的服务。 C/S 模式的具体原理如下: 服务器: 1. 服务器打开一个通信通道并且通知本地主机,它愿意在某一地址和端口上接收客户方的请求; 2. 监听打开的端口,等待客户方的请求到达该端口; 3. 服务器接收 到客户请求,处理该请求,然后发送应答信号,与此同时激活一个新的进程 (或线程 ),用来专门处理这个客户请求。 激活的新进程 (或线程 ) 仅需要处理北京信息科技大学 9 此客户请求,并不需要对其它请求作出响应或者应答。 当服务关闭后,关闭此新进程与客户的通信链路,并且终止; 4. 返回第二步,继续监听端口,等待另一客户的请求; 5. 关闭服务器。 客户方: 1. 服务器方打开一个通信通道,并连接到服务器方打开的特定端口; 2. 向服务器发送服务请求报文,等待并接收服务器方的应答;继续向服务方提出请求; 3. 请求结束后,关闭自己打开通信通道,并且终止。 下面将分别从服务器端与客户端两个方面详细介绍使用 CSocket 类、基于 TCP/。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。