QTcpServer 类
QTcpServer 类提供基于 TCP 的服务器功能。 更多...
头文件 | #include <QTcpServer> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
继承 | QObject |
继承者 |
- 所有成员列表,包括继承的成员
- QTcpServer 是网络编程 API 的一部分 。
注意:此类中的所有函数都是 重入的。
公共函数
QTcpServer(QObject *parent = nullptr) | |
virtual | ~QTcpServer() |
void | close() |
QString | errorString() const |
virtual bool | hasPendingConnections() const |
bool | isListening() const |
bool | listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
(since 6.3) int | listenBacklogSize() const |
int | maxPendingConnections() const |
virtual QTcpSocket * | nextPendingConnection() |
void | pauseAccepting() |
QNetworkProxy | proxy() const |
void | resumeAccepting() |
QHostAddress | serverAddress() const |
QAbstractSocket::SocketError | serverError() const |
quint16 | serverPort() const |
(since 6.3) void | setListenBacklogSize(int size) |
void | setMaxPendingConnections(int numConnections) |
void | setProxy(const QNetworkProxy &networkProxy) |
bool | setSocketDescriptor(qintptr socketDescriptor) |
qintptr | socketDescriptor() const |
bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
信号
void | acceptError(QAbstractSocket::SocketError socketError) |
void | newConnection() |
(since 6.4) void | pendingConnectionAvailable() |
保护函数
void | addPendingConnection(QTcpSocket *socket) |
virtual void | incomingConnection(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,将自动选择端口。如果地址 address 为 QHostAddress::Any,服务器将在所有网络接口上监听。
成功时返回 true
;否则返回 false
。
另请参阅isListening。
[since 6.3]
int QTcpServer::listenBacklogSize() const
返回等待接受的连接的队列大小。
此函数从 Qt 6.3 开始引入。
另请参阅setListenBacklogSize。
int QTcpServer::maxPendingConnections() const
返回最大待接受连接数。默认值为 30。
另请参阅setMaxPendingConnections 和 hasPendingConnections。
[信号]
void QTcpServer::newConnection()
每次有新的连接可用时都会发出此信号,无论它是否已被添加到待处理连接队列中。
另请参阅hasPendingConnections 和 nextPendingConnection。
[虚函数]
QTcpSocket *QTcpServer::nextPendingConnection()
以连接的 QTcpSocket 对象返回下一个待接受连接。
套接字作为服务器的子对象创建,这意味着当 QTcpServer 对象被销毁时,它将自动被删除。当你完成操作后,显式地删除对象仍然是一个好主意,以避免浪费内存。
如果没有待处理的连接,此函数调用将返回 nullptr
。
注意:返回的 QTcpSocket 对象不能在其他线程中使用。如果您想从其他线程使用传入的连接,您需要覆盖 incomingConnection。
void QTcpServer::pauseAccepting()
暂停接受新的连接。队列中的连接将保持在队列中。
另请参阅resumeAccepting。
[私有信号,自 6.4 版起]
void QTcpServer::pendingConnectionAvailable()
每次将新的连接添加到待处理连接队列时都会发出此信号。
注意:这是一个私有信号。它可以在信号连接中使用,但不能由用户发出。
此函数从 Qt 6.4 开始引入。
另请参阅hasPendingConnections 和 nextPendingConnection。
QNetworkProxy QTcpServer::proxy() const
返回此套接字的网络代理。默认使用 QNetworkProxy::DefaultProxy。
另请参阅setProxy 和 QNetworkProxy。
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,则此函数不会超时。
© 2024 The Qt Company Ltd. 所包含的文档贡献是各自所有者的版权。本提供的文档是在著作权基金会发布并由自由软件基金会发布的GNU自由文档许可版本1.3的条款下许可使用的。Qt 和相应标志是The Qt Company Ltd.在芬兰和其他国家的商标。所有其他商标均属于其各自所有者。