.h
#ifndef SERVER_TEST_H
#define SERVER_TEST_H
#include <QObject>
#include<QTcpServer>
#include<QTcpSocket>
#include"common.h"
class Server_Test : public QObject
{
Q_OBJECT
public:
explicit Server_Test(QObject *parent = nullptr);
~Server_Test();
void Init();
private:
void ParsingBuf(QByteArray buff);
void sendBuff(TestServer_Buff buff);
public slots:
void slot_tcp_newClient();
private:
QTcpServer* tcpServer_;
QTcpSocket* set_client_ = nullptr;
};
#endif // SERVER_TEST_H
.cpp
#include "server_test.h"
#include<QDebug>
Server_Test::Server_Test(QObject *parent) : QObject(parent)
{
}
Server_Test::~Server_Test()
{
set_client_->disconnectFromHost();
}
void Server_Test::Init()
{
tcpServer_ = new QTcpServer();
if(!tcpServer_->listen(QHostAddress("127.0.0.1"),TEST_SERVER_PORT))
{
qDebug()<<"Server_Test::Init failed";
return;
}
connect(tcpServer_,&QTcpServer::newConnection,this,&Server_Test::slot_tcp_newClient);
}
void Server_Test::ParsingBuf(QByteArray buff)
{
TestServer_Buff data;
data.boxId = *(int*)buff.data();
data.action = *(TestServer_BoxAction*)(buff.data()+sizeof(int));
qDebug()<<"receive msg:"<<data.boxId<<data.action;
}
void Server_Test::sendBuff(TestServer_Buff buff)
{
//socket send buf
char * p = (char*)(&buff);
QByteArray sendbuf(p,sizeof(buff));
if(set_client_ == nullptr)
{
qDebug()<<"no connect";
return;
}
if(set_client_->state() == QAbstractSocket::ConnectedState)
{
//debug
qDebug()<<"send buf: "<<buff.boxId<<buff.action;
set_client_->write(sendbuf); //write the data itself
}
}
void Server_Test::slot_tcp_newClient()
{
qDebug()<<"Server_Test::slot_tcp_newClient : new connection";
set_client_ = tcpServer_->nextPendingConnection();
tcpServer_->close();
connect(set_client_,&QTcpSocket::readyRead,this,[&](){
QByteArray buf = set_client_->readAll();
ParsingBuf(buf);
});
connect(set_client_, &QAbstractSocket::disconnected,set_client_, &QObject::deleteLater);
}