1.共用的结构体inf.h
#ifndef INF_H
#define INF_H
#include <QColor>
#include <QPoint>
struct MoveInf
{
QPoint srcP;
QPoint targetP;
QColor turnSide;
QColor winSide;
bool isOver=true;
QString inf;
MoveInf(){}
MoveInf(QPoint srcP,QPoint targetP,QColor turnSide, QColor winSide,bool isOver,QString inf){
this->srcP=srcP;
this->targetP=targetP;
this->turnSide=turnSide;
this->winSide=winSide;
this->isOver=isOver;
this->inf=inf;
}
};
#endif // INF_H
2.服务器端
2.1服务器端头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QtNetwork>
#include<QDebug>
#include"inf.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void errorSlot(QAbstractSocket::SocketError);
void serverReadData();
void on_btnSend_clicked();
void hasNewConn();
private:
Ui::Widget *ui;
QTcpServer *tcpServer=NULL;
QTcpSocket *tcpSocketConn=NULL;
const int DATATYPE_MOVE_INF=0;
int port =12366;
QByteArray outBytes;
qint64 totalBytesSize=0;
qint64 receivedBytesSize=0;
void initServer();
void serverSendData(MoveInf moveInf, int dataType);
};
#endif // WIDGET_H
2.2服务器端cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QAbstractSocket>
#include<QDebug>
#include <QJsonDocument>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
initServer();
}
Widget::~Widget()
{
delete ui;
if(tcpSocketConn){
tcpSocketConn->close();
delete tcpSocketConn;
}
if(tcpServer){
tcpServer->close(); //因为建在this上,故无需手工delete
}
}
void Widget::initServer()
{
tcpServer=new QTcpServer(this);