QT TcpSocket 服務端封裝

#ifndef XSOCKETSERVER_H
#define XSOCKETSERVER_H


#include <QTcpSocket>
#include <QTcpServer>




class XSocketServer : public QObject
{
    Q_OBJECT
public:
    XSocketServer();
    ~XSocketServer();

    bool StartListening(quint16 port);
    quint16 GetListeningPort();
    void StopListening();
    bool IsServerListening();
    QTcpServer *GetTcpServer();

signals:
    void signalOnNewConnection(QTcpSocket *pSocket);

protected:
    virtual void OnNewConnection(QTcpSocket *pSocket){Q_UNUSED(pSocket);}

private slots:
    void OnNewConnection();


private:
    QTcpServer *m_pServerSocket = nullptr;


};

#endif // XSOCKETSERVER_H
#include "xsocketserver.h"


XSocketServer::XSocketServer()
{
}

XSocketServer::~XSocketServer()
{
    if(nullptr != m_pServerSocket)
    {
        m_pServerSocket->deleteLater();
    }
}

bool XSocketServer::StartListening(quint16 port)
{
    if(nullptr == m_pServerSocket)
    {
        m_pServerSocket = new QTcpServer(this);
        connect(m_pServerSocket, SIGNAL(newConnection()), SLOT(OnNewConnection()));
    }
    return m_pServerSocket->listen(QHostAddress::Any, port);
}

quint16 XSocketServer::GetListeningPort()
{
    int listenPort = 0;
    if(m_pServerSocket->isListening())
    {
        listenPort = m_pServerSocket->serverPort();
    }
    return listenPort;
}

void XSocketServer::StopListening()
{
    if(nullptr != m_pServerSocket)
    {
        m_pServerSocket->close();
    }
}

bool XSocketServer::IsServerListening()
{
    bool bre = false;
    if(nullptr != m_pServerSocket)
    {
        bre = m_pServerSocket->isListening();
    }
    return bre;
}

QTcpServer *XSocketServer::GetTcpServer()
{
    return m_pServerSocket;
}

void XSocketServer::OnNewConnection()
{
    QTcpSocket *p = m_pServerSocket->nextPendingConnection();
    if(nullptr != p)
    {
        signalOnNewConnection(p);
        OnNewConnection(p);
    }
}





 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章