- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC 第9章 课程设计--网络五子棋
;; 本章提供了“网络五子棋”作为这一学期的第二介课程设计项目,本次课程设计旨在进一步提升学生的动手能力,加强大家对通信程序的理解。本次课程设计的主要目的如下:;; 相信每个人都会五子棋游戏,当游戏的一方构成5个连续的棋子,无论是水平方向、垂直方向,还是斜对角线方向,都表示获胜了。
现实中两人玩五子棋,难免有悔棋的情况,程序设计了悔棋功能。
俗话说“世事如棋局局新”本程序还设计了现实中实现不了的功能,比如游戏回放等功能。;;网络五子棋的开发环境具体要求如下:
开发环境:Microsoft Visual C++6.0。
操作系统:Windows XP(SP2)/Windows Server 2003(SP2)/Windows 7。
分辨率:最佳效果1024×768像素。; 网络五子棋是一个双人游戏程序,程序分为服务器端和客户端两部分。
网络五子棋服务器端模块主要包含服务器端主窗口、服务器设置窗口、服务器套接字,客户套接字类共4个模块。
网络五子棋服务器端模块主要包含客户端窗口、客户端登录窗口和客户端套接字类。
软件结构如图10-1所示:; 网络五子棋的使用,要先在服务器端设置服务器IP和端口号,然后客户端登录服务器,下面可以由双方任意一方开始游戏。其业务流程如图10-2所示。;; TCP协议全称Translate Control Protocol,中文称为传输控制协议,它提供了一个完全可靠的、面向连接的、全双工的字节流传输服务。在设计网络五子棋模块时,考虑到网络传输的数据量不是很大,数据要求准确地传递到对方,因此使用TCP协议进行网络通信。
采用TCP协议进行网络通信的编程模式为:首先创建一个TCP套接字,然后将套接字绑定到本机的IP和端口号上,之后将套接字置于监听模式,当有客户端的套接字连接时,接收客户端的连接请求,这样双方就可以进行通信了。在Visual C++中,可以采用两种方式来进行套接字编程,一种方式是使用套接字的API函数,另一种方式是使用MFC提供的套接字类CAsyncSocket和CSocket。在本模块中,采用第二种方式——使用CSocket类进行网络通信。 ; 下面介绍在Visual C++下使用CSocket类进行网络编程的基本步骤。
(1)从CSocket类派生一个子类,例如CSrvSock。
(2)改写CSocket类的OnAccept方法,当有客户端连接时,调用我们自定义的方法来接受连接。
void CSrvSock::OnAccept(int nErrorCode)
{
m_pDlg-AcceptConnection(); //在主对话框中自定义的方法,用于接受客户端连接
CSocket::OnAccept(nErrorCode);
}
自定义的AcceptConnection方法,用于接受客户端的连接。
void CChessBorad::AcceptConnection()
{
m_ClientSock.Close(); //关闭套接字
m_SrvSock.Accept(m_ClientSock); //接受连接
};(3)从CSocket类再派生一个子类,例如CClientSock。
(4)改写CSocket类的OnReceive方法,当客户端发送数据时,将调用我们自定义的方法接收数据。
void CClientSock::OnReceive(int nErrorCode)
{
if (m_pDlg != NULL)
m_pDlg-ReceiveData(); //调用主对话框自定义方法,接收数据
CSocket::OnReceive(nErrorCode);
}
自定义的ReceiveData方法,当服务器端接收到客户端发送数据时接收数据。
void CChessBorad::ReceiveData()
{
BYTE* pBuffer = new BYTE[sizeof(TCP_PACKAGE)]; //定义一个缓冲区
//接收客户端发来的数据
int factlen = m_ClientSock.Receive(pBuffer,sizeof(TCP_PACKAGE));
delete []pBuffer; //释放缓冲区
};(5)在“StdAfx.h”头文件中引用“afxsock.h”头文件,目的是使用CSocket类。
#include afxsock.h
(6)在应用程序初始化时调用AfxSocketInit方法初始化套接字函数库。
WSADATA wsa;
AfxSocketInit(wsa); //初始化套接
文档评论(0)