|
|
|
|
|
#include "Tcpserver.h"
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
TcpServer::TcpServer(QObject *parent) :
|
|
|
|
|
|
QTcpServer(parent)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_tcpServerPtr = nullptr;
|
|
|
|
|
|
m_tcpSocketPtr = nullptr;
|
|
|
|
|
|
m_tcpServerPtr = new QTcpServer(this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TcpServer::~TcpServer()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_tcpServerPtr)
|
|
|
|
|
|
delete m_tcpServerPtr;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool TcpServer::startConnect(QString address, quint16 port)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_tcpServerPtr == nullptr)
|
|
|
|
|
|
return false;
|
|
|
|
|
|
if (!m_tcpServerPtr->listen(QHostAddress(address), port))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
connect(m_tcpServerPtr, &QTcpServer::newConnection, this, &TcpServer::onNewConnection);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
bool TcpServer::startConnect()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_tcpServerPtr == nullptr)
|
|
|
|
|
|
return false;
|
|
|
|
|
|
if (!m_tcpServerPtr->listen(QHostAddress(m_serverIP), m_serverPort))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
connect(m_tcpServerPtr, &QTcpServer::newConnection, this, &TcpServer::onNewConnection);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
void TcpServer::onCloseConnect()
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
if (m_tcpServerPtr != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_tcpSocketPtr != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_tcpSocketPtr->disconnectFromHost();
|
|
|
|
|
|
m_tcpSocketPtr->close();
|
|
|
|
|
|
m_tcpSocketPtr = nullptr;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_tcpServerPtr->disconnect();
|
|
|
|
|
|
m_tcpServerPtr->close();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
void TcpServer::onNewConnection()
|
|
|
|
|
|
{
|
|
|
|
|
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><D7BD><EFBFBD>
|
|
|
|
|
|
m_tcpSocketPtr = m_tcpServerPtr->nextPendingConnection();
|
|
|
|
|
|
|
|
|
|
|
|
m_clientIp = m_tcpSocketPtr->peerAddress().toString();
|
|
|
|
|
|
m_clientPort = m_tcpSocketPtr->peerPort();
|
|
|
|
|
|
emit sgConnected(m_clientIp, m_clientPort);
|
|
|
|
|
|
|
|
|
|
|
|
connect(m_tcpSocketPtr, &QTcpSocket::readyRead, this, &TcpServer::onReceiveMsg);
|
|
|
|
|
|
//connect(m_tcpSocketPtr, &QTcpSocket::stateChanged, this, &TcpServer::onStateChanged);
|
|
|
|
|
|
//connect(m_tcpSocketPtr, SIGNAL(error(QAbstractSocket::SocketError)), this, &TcpServer::onSocketError);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void TcpServer::onReceiveMsg()
|
|
|
|
|
|
{
|
|
|
|
|
|
QByteArray dataByte = m_tcpSocketPtr->readAll();
|
|
|
|
|
|
if (!dataByte.isEmpty())
|
|
|
|
|
|
{
|
|
|
|
|
|
emit sgReceived(m_clientIp, m_clientPort, dataByte);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//void TcpServer::onDisconnected()
|
|
|
|
|
|
//{
|
|
|
|
|
|
// emit sgDisconnected(m_clientIp, m_clientPort);
|
|
|
|
|
|
//}
|
|
|
|
|
|
//void TcpServer::onStateChanged(QAbstractSocket::SocketState socketState)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// if (socketState == QAbstractSocket::UnconnectedState)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// emit sgDisconnected(m_clientIp, m_clientPort);
|
|
|
|
|
|
// m_tcpSocketPtr->deleteLater();
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
//
|
|
|
|
|
|
//void TcpServer::onSocketError(QAbstractSocket::SocketError socketError)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// int error = m_tcpSocketPtr->error();
|
|
|
|
|
|
// if (error == QAbstractSocket::RemoteHostClosedError)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// emit sgDisconnected(m_clientIp, m_clientPort);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|