#include "Tcpserver.h" #include 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() { //取出建立好连接的套接字 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); // } //}