Qt Tcp Server

chatgpt 结果

// 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);
	}
}

posted @ 2023-03-20 09:02  simp00  阅读(64)  评论(0编辑  收藏  举报