QTcpServer基本用法

    xiaoxiao2022-06-22  18

    Server.h

    #include <QObject> #include <QTcpServer> #include <QTcpSocket> #include <QNetworkInterface> #include "IMsgInterface.h" class Server : public QObject { Q_OBJECT public: explicit Server(QObject *parent = 0); ~Server(); void init(IMsgInterface * pMsgHandler, int port); void sendData(QString ip, QString data); void sendData(QString ip, uchar *rawData); signals: private slots: void newConnectSlot(); void readMessage(); void removeUserFormList(); private: QTcpServer *m_tcpServer; QMap<QString, QTcpSocket *> m_mapClient; IMsgInterface *m_pMsgHandler; };

    Server.cpp

    #include "Server.h" Server::Server(QObject *parent) : QObject(parent) { m_tcpServer = new QTcpServer(); //设置最大允许连接数,不设置的话默认为30 m_tcpServer->setMaxPendingConnections(2000); // QDBG << m_tcpServer->maxPendingConnections(); connect(m_tcpServer,SIGNAL(newConnection()),this,SLOT(newConnectSlot())); } Server::~Server() { } void Server::init(IMsgInterface * pMsgHandler, int port) { m_pMsgHandler = pMsgHandler; if(m_tcpServer->listen(QHostAddress::Any, port)){ QDBG << "listen OK!"; }else{ QDBG << "listen error!"; } } void Server::sendData(QString ip, QString data) { m_mapClient.value(ip)->write(data.toLatin1()); } void Server::sendData(QString ip, uchar *rawData) { m_mapClient.value(ip)->write(QByteArray((char*)rawData)); } void Server::newConnectSlot() { QTcpSocket *tcp = m_tcpServer->nextPendingConnection(); connect(tcp,SIGNAL(readyRead()),this,SLOT(readMessage())); m_mapClient.insert(tcp->peerAddress().toString(), tcp); m_pMsgHandler->devOnline(tcp->peerAddress().toString()); connect(tcp,SIGNAL(disconnected()),this,SLOT(removeUserFormList())); } void Server::readMessage() { QTcpSocket *socket = static_cast<QTcpSocket*>(sender()); m_pMsgHandler->recvFromServer(socket->peerAddress().toString(), QString(socket->readAll())); } void Server::removeUserFormList() { QTcpSocket* socket = static_cast<QTcpSocket*>(sender()); QMap<QString, QTcpSocket *>::iterator it; for(it=m_mapClient.begin();it!=m_mapClient.end();it++) { if(socket->peerAddress().toString() == it.key()) { m_mapClient.erase(it); m_pMsgHandler->devOffline(socket->peerAddress().toString()); break; } } }
    转载请注明原文地址: https://ju.6miu.com/read-1122771.html

    最新回复(0)