介绍
QTcpServer使用请见:QTcpSocket-Qt使用Tcp通讯实现服务端和客户端
QTcpServer类默认提供的只有无参数的newConnection的信号,这样虽然知道有人连接了,并且可以通过nextPendingConnection获取连接的socket,但并不便于管理,尤其是在连接断开以后无法判断具体那个断开了,因为QTcpSocket只提供了无参的disconnected信号。。。
这样就算在newConnection是存储一个list或者map,也无法在disconnected是知道具体是那一项断开连接,给不同的QTcpSocket的信号指向不同的槽。
实际上socket有自己的句柄,并通过下述函数在初步连接时就赋予了对应的socketDescriptor
virtual void incomingConnection(qintptr socketDescriptor)
当有client连接时,首先是此方法被调用,可自行在此方法内建立QTcpSocket并将socketDescriptor值赋予socket,并在socket断开时告知此标识符
范例
源码请见GitHub:QtOtherModuleExamples
tcp_server.h
#ifndef TCP_SERVER_H
#define TCP_SERVER_H
#include <QTcpServer>
namespace tcp_server_private {
class TcpServerPrivate;
}
class QTcpSocket;
/**
* @brief Tcp多客户端服务器
*/
class TcpServer : public QTcpServer {
Q_OBJECT
public:
/**
* @brief 构造函数
* @param parent 父QObject
*/
explicit TcpServer(QObject *parent = Q_NULLPTR);
/**