chatgpt 结果
head
// TcpServerBase.h
#ifndef TCPSERVER_H
#define TCPSERVER_H
#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>
class TcpServerBase : public QObject
{
Q_OBJECT
public:
explicit TcpServerBase(QObject *parent = nullptr);
bool start(quint16 port);
void stop();
signals:
void clientConnected(QTcpSocket *socket);
void clientDisconnected(QTcpSocket *socket);
void readyRead(QTcpSocket *socket);
void bytesWritten(QTcpSocket *socket, qint64 bytes);
void error(QTcpSocket::SocketError socketError);
private slots:
void onNewConnection();
void onClientDisconnected();
void onReadyRead();
void onBytesWritten(qint64 bytes);
private:
QTcpServer *m_server;
};
#endif // TCPSERVER_H
// tcpserver.cpp
#include "TcpServerBase.h"
TcpServerBase::TcpServerBase(QObject *parent) : QObject(parent), m_server(nullptr)
{
m_server = new QTcpServer(this);
connect(m_server, &QTcpServer::newConnection, this, &TcpServerBase::onNewConnection);
}
bool TcpServerBase::start(quint16 port)
{
if (!m_server->listen(QHostAddress::Any, port)) {
return false;
}
return true;
}
void TcpServerBase::stop()
{
m_server->close();
//qDeleteAll(m_clients);
//m_clients.clear();
}
void TcpServerBase::onNewConnection()
{
while (m_server->hasPendingConnections()) {
QTcpSocket *client = m_server->nextPendingConnection();
//m_clients.append(client);
connect(client, &QTcpSocket::disconnected, this, &TcpServerBase::onClientDisconnected);
connect(client, &QTcpSocket::readyRead, this, &TcpServerBase::onReadyRead);
connect(client, &QTcpSocket::bytesWritten, this, &TcpServerBase::onBytesWritten);
emit clientConnected(client);
}
}
void TcpServerBase::onClientDisconnected()
{
QTcpSocket *client = qobject_cast<QTcpSocket*>(sender());
if (client) {
//m_clients.removeOne(client);
//client->deleteLater();
emit clientDisconnected(client);
}
}
void TcpServerBase::onReadyRead()
{
QTcpSocket *client = qobject_cast<QTcpSocket*>(sender());
if (client) {
emit readyRead(client);
}
}
void TcpServerBase::onBytesWritten(qint64 bytes)
{
QTcpSocket *client = qobject_cast<QTcpSocket*>(sender());
if (client) {
emit bytesWritten(client, bytes);
}
}
标签:Qt,void,Tcp,Server,client,QTcpSocket,server,TcpServerBase,QObject
From: https://www.cnblogs.com/simp/p/17235152.html