使用Qt开发中国象棋(七):网络对战
关于Qt网络编程
QTcpServer用于创建TCP服务器端。当newConnection信号激发时,我们调用指定的槽创建一个通信的套接字。
QTcpSocket用于创建TCP通信套接字。当connected信号激发时,我们向服务器端发送消息,当readyRead信号激发时,我们就可以读取数据了。
本程序中网络对战的实现
本程序封装了QTcpServer和QTcpSocket来实现网络对战的功能。服务器端实现类为ServerNetwork,客户端实现类为ClientNetwork。整个流程大致如下:
(1)服务器端监听套接字。
void ServerNetwork::initServer(int port)
{server = new QTcpServer(this);connect(server, SIGNAL(newConnection()), this, SLOT(newConnection()));if(!server->listen(QHostAddress::Any, port)){QMessageBox::critical(NULL, tr("错误信息"), tr("监听端口失败!"));}
}
(2)客户端连接服务器。
void ClientNetwork::initClient(QString serverIP, int port)
{clientSocket = new QTcpSocket();connect(clientSocket, SIGNAL(connected()), this, SLOT(connected()));connect(clientSocket, SIGNAL(disconnected()),this, SLOT(disconnected()));connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater()));connect(clientSocket, SIGNAL(readyRead()), this, SLOT(readData()));connect(clientSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError)));QHostAddress addr(serverIP);clientSocket->connectToHost(addr, port);
}
(3)客户端连接上服务器后,服务器创建与客户端通信的套接字,客户端发送请求获取游戏信息。
void ServerNetwork::newConnection()
{serverSocket = server->nextPendingConnection();connect(serverSocket, SIGNAL(disconnected()), this, SLOT(disconnected()));connect(serverSocket, SIGNAL(disconnected()), serverSocket, SLOT(deleteLater()));connect(serverSocket, SIGNAL(readyRead()), this, SLOT(readData()));emit connStateChanged(true);
}void ClientNetwork::connected()
{emit connStateChanged(true);MsgReqGameInfo msg;clientSocket->write((char *)&msg, sizeof(msg));
}
(4)双方等待套接字上有数据可读,并进行消息处理。
void ClientNetwork::readData()
{char msg[1024];memset(msg, 0, 1024);int len = clientSocket->read(msg, 1024);emit processMessage(msg, len);
}void ServerNetwork::readData()
{char msg[1024];memset(msg, 0, 1024);int len = serverSocket->read(msg, 1024);emit processMessage(msg, len);
}
整个过程还是相当简单的。与C语言api相比,Qt提供的类要方便得多。
源代码下载链接:http://download.csdn.net/detail/zxywd/9172917
使用Qt开发中国象棋(七):网络对战相关推荐
- 中国象棋之网络对战 v1.2.3 绿色
Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...
- 中国象棋之网络对战 免费软件下载
Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...
- Qt实现中国象棋:(七)悔棋
一.下棋步骤的保存 在设置保存下棋步骤之前,先定义一个bool类型的变量player用于判定是哪一方下子,设定player=true时是红方下棋,player=false时是黑方下棋. 1:要想保存下 ...
- 使用Qt开发中国象棋(一):概述
最近看了一些关于中国象棋的实现书籍,里面讲述了如何开发一个完整的中国象棋游戏,看了里面的内容,感觉里面的内容特别巧妙的,比如书中提到了用位棋盘来表示中国象棋的棋盘以及一些精妙的走棋算法.基于这些,自己 ...
- 使用Qt开发中国象棋(三):走棋着法列表
在一个完整的中国象棋游戏中,一般界面上都显示了中文着法,为了简单起见,我开发的这个用了两个着法列表,红方一个,黑方一个,其实用一个就够了,只是感觉那样稍微会麻烦些.着法列表显示了每一步的走棋.下图是着 ...
- 使用Qt开发中国象棋(六):将军和死棋检测
下棋的过程中,某一方主帅被对方攻击就是将军,如果不能解除危险,就是死棋.在这个游戏中实现了将军的判断和死棋的检测.具体如下: (1)每走一步棋时,先要判断自己能不能这样走,当然除了走法是否合乎规则,比 ...
- Qt实现中国象棋:(六)棋子移动规则
一.移动规则的制定 关于中国象棋游戏棋子移动规则有马走日,象走田等说法,下面就将各类棋子的移动规则进行说明及实现(开局时默认红棋在下方,黑棋在上方).棋子移动规则中fromX.fromY为起始点坐标, ...
- 视频教程-Java基础中国象棋和网络聊天室Swing开发-Java
Java基础中国象棋和网络聊天室Swing开发 IT行业资深从业者,7年资深Java高级开发,Java架构师.曾就职银行.电信等行业多家上市公司.担任项目负责人,软件架构师.有丰富的高并发.分布式系统 ...
- C++与Qt开发人机象棋(第二部分)
C++与Qt开发人机象棋(第二部分) 项目目录 文件名->(包含)类名1->(包含)类名2 ChessBy ChessBy.pro Headers Board.h – – – Source ...
- Qt实现中国象棋:(三)棋盘绘制的详细分析及实现
一.图片及棋盘分析 1:在上文中已经对单张图片的显示进行了测试,从中可以知道一张图片需要一个QPixmap对象对其进行加载.棋盘图片共有23张,也就需要23个QPixmap的对象.同时要求对象名与图片 ...
最新文章
- 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件
- JavaScript的数据访问总结
- POJ 2799 IP Networks
- jboss8日志级别设置_罐中研讨会:设置JBoss BPM Suite全日研讨会
- javascript中的一些核心知识点以及需要注意的地方
- CyclicBarrier(栅栏)实现高并发测试
- 高速串行总线走线难点在哪?重要线信号的处理经验分享
- atitit tag标签标示规范 attilax总结 v2 r922.docx
- freemarker的下拉框回显
- 【网站模板】第01期—15套免费网站后台管理模板
- log4j2.xml 配置文件详解
- dubbo中 provider和 comsumer端timeout的设置区别
- R语言逻辑回归、方差分析 、伪R平方分析
- 2021-2027全球与中国物联网基础设施市场现状及未来发展趋势
- 跨次元!目标检测类别超20000!
- MyEclipse2017破解时 ACTIVATION_KEY为null
- 系统权限管理功能设计研究
- python实现购物车总结,Python实现的购物车功能示例
- 详解VMware12安装Mac OS X 10.11
- MAC xmind破解版使用