tcp服务端

1.头文件

#ifndef CTCPSERVER_H
#define CTCPSERVER_H

#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>

class CTcpServer : public QObject
{
    Q_OBJECT
public:
    CTcpServer(quint16 port, QObject* parent = nullptr);
public slots:
    void NewConnectionSlot();       // 连接
    void ClientDisconnectedSlot();  // 断开连接
    void ClientReadyReadSlot();     // 有数据
private:
    QTcpServer* m_pServer;  // tcp服务
    QMap<QString, QTcpSocket*> m_sockets;   // 所有连接的客户端
};

#endif // CTCPSERVER_H

2.源文件

#include "ctcpserver.h"

CTcpServer::CTcpServer(quint16 port, QObject* parent):
    QObject(parent),
    m_pServer(new QTcpServer(this))
{
    m_pServer->listen(QHostAddress::Any, port);
    connect(m_pServer, &QTcpServer::newConnection, this, &CTcpServer::NewConnectionSlot);
}

void CTcpServer::NewConnectionSlot()
{
    if(m_pServer == nullptr) {
        return;
    }
    while (m_pServer->hasPendingConnections()) {
        QTcpSocket* pSocket = m_pServer->nextPendingConnection();
        if(pSocket == nullptr) {
            continue;
        }
        QString ip = QHostAddress(pSocket->peerAddress().toIPv4Address()).toString();
        connect(pSocket, &QTcpSocket::disconnected, this, &CTcpServer::ClientDisconnectedSlot);
        connect(pSocket, &QTcpSocket::readyRead, this, &CTcpServer::ClientReadyReadSlot);
        m_sockets.insert(ip, pSocket);
    }
}

void CTcpServer::ClientDisconnectedSlot()
{
    QTcpSocket* pSocket = qobject_cast<QTcpSocket*>(sender());
    if(pSocket == nullptr) {
        return;
    }
    QString ip = QHostAddress(pSocket->peerAddress().toIPv4Address()).toString();
    disconnect(pSocket, &QTcpSocket::disconnected, this, &CTcpServer::ClientDisconnectedSlot);
    disconnect(pSocket, &QTcpSocket::readyRead, this, &CTcpServer::ClientReadyReadSlot);
    m_sockets.remove(ip);
}

void CTcpServer::ClientReadyReadSlot()
{
    QTcpSocket* pSocket = qobject_cast<QTcpSocket*>(sender());
    if(pSocket == nullptr) {
        return;
    }
    QString ip = QHostAddress(pSocket->peerAddress().toIPv4Address()).toString();
    QByteArray buffer = pSocket->readAll();
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容