QTcpServer 类

QTcpServer 类提供基于 TCP 的服务器功能。 更多...

头文件 #include <QTcpServer>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network
继承 QObject
继承者

QSctpServerQSslServer

注意:此类中的所有函数都是 重入的

公共函数

QTcpServer(QObject *parent = nullptr)
virtual~QTcpServer()
voidclose()
QStringerrorString() const
virtual boolhasPendingConnections() const
boolisListening() const
boollisten(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
(since 6.3) intlistenBacklogSize() const
intmaxPendingConnections() const
virtual QTcpSocket *nextPendingConnection()
voidpauseAccepting()
QNetworkProxyproxy() const
voidresumeAccepting()
QHostAddressserverAddress() const
QAbstractSocket::SocketErrorserverError() const
quint16serverPort() const
(since 6.3) voidsetListenBacklogSize(int size)
voidsetMaxPendingConnections(int numConnections)
voidsetProxy(const QNetworkProxy &networkProxy)
boolsetSocketDescriptor(qintptr socketDescriptor)
qintptrsocketDescriptor() const
boolwaitForNewConnection(int msec = 0, bool *timedOut = nullptr)

信号

voidacceptError(QAbstractSocket::SocketError socketError)
voidnewConnection()
(since 6.4) voidpendingConnectionAvailable()

保护函数

voidaddPendingConnection(QTcpSocket *socket)
virtual voidincomingConnection(qintptr socketDescriptor)

详细描述

此类使您能够接受传入的TCP连接。您可以指定端口或由QTcpServer自动选择一个端口。您可以在特定地址或机器上的所有地址上监听。

调用listen()让服务器监听传入连接。每当客户端连接到服务器时,就发射newConnection()信号。当使用addPendingConnection()函数将客户端连接添加到待处理连接队列中时,就发射pendingConnectionAvailable()信号。

调用nextPendingConnection()来接受待处理的连接作为已连接的QTcpSocket。该函数返回一个指向QTcpSocket的指针,该指针处于QAbstractSocket::ConnectedState,可以用于与客户端进行通信。

如果发生错误,serverError()返回错误类型,并且可以调用errorString()来获取发生情况的人类可读描述。

服务器正在监听连接时,用于监听的地址和端口号可通过serverAddress()和serverPort()获取。

调用close()使得QTcpServer停止监听传入连接。

尽管QTcpServer主要设计用于与事件循环一起使用,但它也可以不使用事件循环使用。在这种情况下,您必须使用waitForNewConnection(),它会阻塞,直到有一个连接可用或者超时。

另请参阅QTcpSocket财富服务器线程化财富服务器种子示例

成员函数文档

[显式] QTcpServer::QTcpServer(QObject *parent = nullptr)

构造一个QTcpServer对象。

parent被传递给QObject构造函数。

另请参阅listen()和setSocketDescriptor

[虚拟 noexcept] QTcpServer::~QTcpServer()

销毁QTcpServer对象。如果服务器正在监听连接,套接字会自动关闭。

任何仍然连接的客户端QTcpSocket必须在删除服务器之前断开连接或重新指定父对象。

另请参阅close

[信号] void QTcpServer::acceptError(QAbstractSocket::SocketError socketError)

当接受新的连接导致错误时,会发射此信号。参数socketError描述了发生的错误类型。

另请参阅pauseAccepting()和resumeAccepting

[保护] void QTcpServer::addPendingConnection(QTcpSocket *socket)

此函数由QTcpServer::incomingConnection() 调用,用于将 套接字 添加到待处理的传入连接列表中。

注意:如果您不希望破坏待处理连接机制,请不要忘记从重新实现的incomingConnection() 中调用此成员。此函数在将套接字添加后发出 pendingConnectionAvailable() 信号。

另请参阅:incomingConnection() 和 pendingConnectionAvailable()。

void QTcpServer::close()

关闭服务器。服务器不再监听传入连接。

另请参阅:listen()。

QString QTcpServer::errorString() const

返回最后发生错误的友好描述。

另请参阅:serverError()。

[虚拟] bool QTcpServer::hasPendingConnections() const

如果服务器有一个待处理的连接,则返回 true;否则返回 false

另请参阅:nextPendingConnection() 和 setMaxPendingConnections()。

[虚拟保护] void QTcpServer::incomingConnection(qintptr socketDescriptor)

此虚拟函数在新的连接可用时由 QTcpServer 调用。参数 socketDescriptor 是接受连接的原生套接字描述符。

基本实现创建一个 QTcpSocket,设置套接字描述符,然后将 QTcpSocket 存储在内部的等待连接列表中。最后发出 newConnection()。

重新实现此函数以改变服务器在连接可用时的行为。

如果此服务器使用 QNetworkProxy,则 socketDescriptor 可能无法与原生套接字函数一起使用,并且应仅用于 QTcpSocket::setSocketDescriptor()。

注意:如果在此方法的重新实现中创建了另一个套接字,需要通过调用 addPendingConnection() 将其添加到待处理连接机制中。

注意:如果您想在另一个线程中将传入连接处理为新的 QTcpSocket 对象,则必须将 socketDescriptor 传递到该线程,并在那里创建 QTcpSocket 对象并使用其 setSocketDescriptor() 方法。

另请参阅:newConnection()、nextPendingConnection() 和 addPendingConnection()。

bool QTcpServer::isListening() const

如果服务器当前正在监听传入连接,则返回 true;否则返回 false

另请参阅:listen()。

bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)

通知服务器在指定地址 address 和端口 port 上监听传入连接。如果端口号 port 为 0,将自动选择端口。如果地址 addressQHostAddress::Any,服务器将在所有网络接口上监听。

成功时返回 true;否则返回 false

另请参阅isListening

[since 6.3] int QTcpServer::listenBacklogSize() const

返回等待接受的连接的队列大小。

此函数从 Qt 6.3 开始引入。

另请参阅setListenBacklogSize

int QTcpServer::maxPendingConnections() const

返回最大待接受连接数。默认值为 30。

另请参阅setMaxPendingConnectionshasPendingConnections

[信号] void QTcpServer::newConnection()

每次有新的连接可用时都会发出此信号,无论它是否已被添加到待处理连接队列中。

另请参阅hasPendingConnectionsnextPendingConnection

[虚函数] QTcpSocket *QTcpServer::nextPendingConnection()

以连接的 QTcpSocket 对象返回下一个待接受连接。

套接字作为服务器的子对象创建,这意味着当 QTcpServer 对象被销毁时,它将自动被删除。当你完成操作后,显式地删除对象仍然是一个好主意,以避免浪费内存。

如果没有待处理的连接,此函数调用将返回 nullptr

注意:返回的 QTcpSocket 对象不能在其他线程中使用。如果您想从其他线程使用传入的连接,您需要覆盖 incomingConnection

另请参阅hasPendingConnections

void QTcpServer::pauseAccepting()

暂停接受新的连接。队列中的连接将保持在队列中。

另请参阅resumeAccepting

[私有信号,自 6.4 版起] void QTcpServer::pendingConnectionAvailable()

每次将新的连接添加到待处理连接队列时都会发出此信号。

注意:这是一个私有信号。它可以在信号连接中使用,但不能由用户发出。

此函数从 Qt 6.4 开始引入。

另请参阅hasPendingConnectionsnextPendingConnection

QNetworkProxy QTcpServer::proxy() const

返回此套接字的网络代理。默认使用 QNetworkProxy::DefaultProxy

另请参阅setProxyQNetworkProxy

void QTcpServer::resumeAccepting()

继续接受新的连接。

另请参阅pauseAccepting

QHostAddress QTcpServer::serverAddress() const

如果服务器正在监听连接,则返回服务器的地址;否则返回 QHostAddress::Null

另请参阅 serverPort() 和 listen

QAbstractSocket::SocketError QTcpServer::serverError() const

返回最后发生的错误代码。

另请参阅 errorString

quint16 QTcpServer::serverPort() const

如果服务器正在监听连接,则返回服务器的端口;否则返回 0。

另请参阅 serverAddress() 和 listen

[自 6.3以来] void QTcpServer::setListenBacklogSize(int size)

设置要接受连接的队列大小为 size。操作系统可能会减少或忽略此值。默认队列大小为 50。

注意: 必须在调用 listen() 之前设置此属性。

此函数从 Qt 6.3 开始引入。

另请参阅 listenBacklogSize

void QTcpServer::setMaxPendingConnections(int numConnections)

设置最大待接受连接数为 numConnections。在调用 nextPendingConnection() 之前,QTcpServer 将不会接受超过 numConnections 的传入连接。默认情况下,限制为 30 个待接受连接。

即使在服务器达到最大待接受连接数之后,客户端仍然可能能够建立连接(即,QTcpSocket 仍然可以发出 connected() 信号)。QTcpServer 将停止接受新的连接,但操作系统可能会继续将它们保留在队列中。

另请参阅 maxPendingConnections() 和 hasPendingConnections

void QTcpServer::setProxy(const QNetworkProxy &networkProxy)

将此套接字的显式网络代理设置为 networkProxy

要禁用此套接字的代理使用,请使用 QNetworkProxy::NoProxy 代理类型

server->setProxy(QNetworkProxy::NoProxy);

另请参阅 proxy() 和 QNetworkProxy

bool QTcpServer::setSocketDescriptor(qintptr socketDescriptor)

设置服务器在监听传入连接时应使用的套接字描述符为 socketDescriptor。如果成功设置套接字,则返回 true,否则返回 false

假设套接字处于监听状态。

另请参阅 socketDescriptor() 和 isListening

qintptr QTcpServer::socketDescriptor() const

返回服务器用于监听传入指令的本地套接字描述符,如果服务器未正在监听,则返回-1。

如果服务器正在使用QNetworkProxy,则返回的描述符可能无法与本地套接字函数一起使用。

另请参阅setSocketDescriptor()和isListening()。

bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)

等待最多msec毫秒或直到可用的传入连接。如果有连接可用,则返回true;否则返回false。如果操作超时且timedOut不是nullptr,则*i translate="no">timedOut将被设置为true。

这是一个阻塞函数调用。在单线程GUI应用程序中使用其建议使用非常不推荐,因为应用程序将停止响应,直到函数返回。waitForNewConnection()主要在有事件循环不可用时非常有用。

不阻塞的替代方案是连接到newConnection()信号。

如果msec是-1,则此函数不会超时。

另请参阅hasPendingConnectionsnextPendingConnection

© 2024 The Qt Company Ltd. 所包含的文档贡献是各自所有者的版权。本提供的文档是在著作权基金会发布并由自由软件基金会发布的GNU自由文档许可版本1.3的条款下许可使用的。Qt 和相应标志是The Qt Company Ltd.在芬兰和其他国家的商标。所有其他商标均属于其各自所有者。