You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
visioncontroller/src/TcpServer/TcpServer.cpp

97 lines
2.4 KiB
C++

#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);
// }
//}