QTcpServer实现多客户端连接

 

介绍

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

你可能感兴趣的:(QTcpServer实现多客户端连接)