首页 > 其他分享 >Qt Tcp Server

Qt Tcp Server

时间:2023-03-20 09:11:14浏览次数:36  
标签:Qt void Tcp Server client QTcpSocket server TcpServerBase QObject

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

标签:Qt,void,Tcp,Server,client,QTcpSocket,server,TcpServerBase,QObject
From: https://www.cnblogs.com/simp/p/17235152.html

相关文章

  • 好用的ftp server
    之前在两台电脑之间备份的时候想搞一个局域网传输工具,在网上找了半天没有找到一个好用的东西,用的是utool自带的share,慢的可以,无法忍受(后来证明是路由器的问题),当我把WiFi换......
  • SQL Server开启1433端口,彻底解决方案
    SQLServer开启1433端口,彻底解决方案yaohan404关注IP属地:广东0.1782018.01.0510:34:18字数377阅读29,057环境:Windows10+SQLServer2008在用JDBC连接SQLSe......
  • Microsoft SQL Server 2022 新特性之 T-SQL 语言增强(一)
    MicrosoftSQLServer2022已经​​正式发布​​​,可以下载使用。本文给大家介绍一下该版本中的部分 ​​T-SQL​​ 新功能。​​窗口函数​​增强新版本中的窗口函数支......
  • Microsoft SSQL Server 2022 新特性之 T-SQL 语言增强(二)
    SON函数增强新版本中的ISJSON()函数增加了一个可选参数:ISJSON(expression[,json_type_constraint])1参数json_type_constraint用于指定要测试的JSON类型,包括VA......
  • 了解SQL Server 2022的最新功能和未来规划
    微软已经正式发布了备受期待的SQLServer2022,乍一看,它更像是在为Azure推销产品。对安全性和性能特性进行改进,以及一些对Azure更加友好的功能,SQLServer2022用户当然可以期......
  • Nat Server
    实验拓扑R1配置[R1-GigabitEthernet0/0/1]natserverprotocoltcpglobal12.1.1.1wwwinside192.168.1.8wwwR1接口配置法[R1-GigabitEthernet0/0/1]natserverprot......
  • 可以建立TCP连接但是无法ping通?windows设置
    前提关闭防火墙可以ping通,开启防火墙发现无法ping通,但是TCP连接可达。做法启用入站规则中的文件和打印机共享(ipv4或者ipv6根据需要自己看)尝试ping。如果还不行执......
  • SQL Server2022 新功能特性
    2022年11月16日,SQLServer2022正式发布,SQLServer2022是迄今为止支持Azure最多的版本,具有持续的性能、安全性和可用性创新。探索SQLServer2022功能通过Azure实......
  • SQL Server 2022 新特性 - 内存授予反馈:持久性和百分比授予
    内存授予反馈(MGF)是SQLServer中的一项现有功能,SQLServer2022中提供了两项重要改进:反馈持久性和百分比授予反馈。这两个功能增强了内存授予反馈的好处,因为它已经存在......
  • 腾讯云数据库SQL Server(TencentDB for SQL Server)介绍
    云数据库SQLServer(TencentDBforSQLServer)具有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩容等特......