欢迎来到天天文库
浏览记录
ID:40239557
大小:2.19 MB
页数:57页
时间:2019-07-28
《Visual C++应用开发与实践 刘乃琦_ VC 第9章 课程设计--网络五子棋》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本章要点:第8章课程设计--网络五子棋网络五子棋的设计目的网络五子棋的开发环境要求网络五子棋的功能结构主要功能模块的界面设计主要功能模块的关键代码网络五子棋的调试运行8.1课程设计目的本章提供了“网络五子棋”作为这一学期的第二介课程设计项目,本次课程设计旨在进一步提升学生的动手能力,加强大家对通信程序的理解。本次课程设计的主要目的如下:课程设计目的学习客户服务器程序的开发流程学会使用TCP协议进行网络通信。自定义网络通信协议对方网络状态测试实现动态调整棋盘大小8.2功能描述相信每个人都会五子棋游戏,当游戏的一方构成5个连续的棋子,无
2、论是水平方向、垂直方向,还是斜对角线方向,都表示获胜了。现实中两人玩五子棋,难免有悔棋的情况,程序设计了悔棋功能。俗话说“世事如棋局局新”本程序还设计了现实中实现不了的功能,比如游戏回放等功能。功能描述9.3.1构建开发环境9.3.2软件功能结果9.3.3业务流程图9.3总体设计网络五子棋的开发环境具体要求如下:开发环境:MicrosoftVisualC++6.0。操作系统:WindowsXP(SP2)/WindowsServer2003(SP2)/Windows7。分辨率:最佳效果1024×768像素。9.3.1构建开发环境网络五
3、子棋是一个双人游戏程序,程序分为服务器端和客户端两部分。网络五子棋服务器端模块主要包含服务器端主窗口、服务器设置窗口、服务器套接字,客户套接字类共4个模块。网络五子棋服务器端模块主要包含客户端窗口、客户端登录窗口和客户端套接字类。软件结构如图10-1所示:9.3.2软件功能结构图10-1网络五子棋软件结构图网络五子棋的使用,要先在服务器端设置服务器IP和端口号,然后客户端登录服务器,下面可以由双方任意一方开始游戏。其业务流程如图10-2所示。9.3.3业务流程图图10-2网络五子棋业务流程图9.4.1使用TCP协议进行网络通信9.4
4、.2定义网络通信协议9.4.3服务器住窗口设计9.4.4棋盘窗口设计9.4.5游戏控制窗口设计9.4.6对方信息窗口设计9.4.7客户端窗口设计9.4实现过程TCP协议全称TranslateControlProtocol,中文称为传输控制协议,它提供了一个完全可靠的、面向连接的、全双工的字节流传输服务。在设计网络五子棋模块时,考虑到网络传输的数据量不是很大,数据要求准确地传递到对方,因此使用TCP协议进行网络通信。采用TCP协议进行网络通信的编程模式为:首先创建一个TCP套接字,然后将套接字绑定到本机的IP和端口号上,之后将套接字置
5、于监听模式,当有客户端的套接字连接时,接收客户端的连接请求,这样双方就可以进行通信了。在VisualC++中,可以采用两种方式来进行套接字编程,一种方式是使用套接字的API函数,另一种方式是使用MFC提供的套接字类CAsyncSocket和CSocket。在本模块中,采用第二种方式——使用CSocket类进行网络通信。9.4.1使用TCP协议进行网络通信下面介绍在VisualC++下使用CSocket类进行网络编程的基本步骤。(1)从CSocket类派生一个子类,例如CSrvSock。(2)改写CSocket类的OnAccept方法
6、,当有客户端连接时,调用我们自定义的方法来接受连接。voidCSrvSock::OnAccept(intnErrorCode){m_pDlg->AcceptConnection();//在主对话框中自定义的方法,用于接受客户端连接CSocket::OnAccept(nErrorCode);}自定义的AcceptConnection方法,用于接受客户端的连接。voidCChessBorad::AcceptConnection(){m_ClientSock.Close();//关闭套接字m_SrvSock.Accept(m_Client
7、Sock);//接受连接}(3)从CSocket类再派生一个子类,例如CClientSock。(4)改写CSocket类的OnReceive方法,当客户端发送数据时,将调用我们自定义的方法接收数据。voidCClientSock::OnReceive(intnErrorCode){if(m_pDlg!=NULL)m_pDlg->ReceiveData();//调用主对话框自定义方法,接收数据CSocket::OnReceive(nErrorCode);}自定义的ReceiveData方法,当服务器端接收到客户端发送数据时接收数据。v
8、oidCChessBorad::ReceiveData(){BYTE*pBuffer=newBYTE[sizeof(TCP_PACKAGE)];//定义一个缓冲区//接收客户端发来的数据intfactlen=m_ClientSock.
此文档下载收益归作者所有