Qt:QTcpServer 深藏阁楼爱情的钟 2022-11-07 11:42 46阅读 0赞 # QTcpSocket # > **功能:** > > * QTcpSocket类提供一个TCP套接字 > > **引入:** > > <table> > <thead> > <tr> > <th>头文件</th> > <th><code>#include <QTcpSocket></code></th> > </tr> > </thead> > <tbody> > <tr> > <td>qmake</td> > <td><code>QT += network</code></td> > </tr> > <tr> > <td>继承</td> > <td>QAbstractSocket</td> > </tr> > <tr> > <td>继承者</td> > <td>QSctpSocket 、QSslSocket</td> > </tr> > </tbody> > </table> > > **详细说明:** > > * TCP (Transmission Control Protocol)是一种可靠的、面向流的、面向连接的传输协议。它特别适合于数据的连续传输。 > * QTcpSocket是QAbstractSocket的一个方便的子类,它允许您建立TCP连接并传输数据流。请参阅`QAbstractSocket`文档了解详细信息。 > * 注意:TCP套接字不能在`QIODevice::Unbuffered`模式下打开。 > 官方文档:[https://doc.qt.io/qt-5/qtcpsocket.html][https_doc.qt.io_qt-5_qtcpsocket.html] ### QTcpSocket ### > **原型:** > > QTcpSocket::QTcpSocket(QObject *parent = nullptr) > > **功能:** > > * 创建状态为UnconnectedState的QTcpSocket对象 > \*See also`socketType().` ### ~QTcpSocket() ### > **原型:** > > [virtual]QTcpSocket::~QTcpSocket() > > **功能:** > > * 销毁套接字,必要时关闭连接。 > * See also `close().` # QTcpServer # > **功能:** > > * QTcpServer类提供了一个基于TCP的服务器。 > > **引入:** > > <table> > <thead> > <tr> > <th>头文件</th> > <th><code>#include <QTcpServer></code></th> > </tr> > </thead> > <tbody> > <tr> > <td>qmake</td> > <td><code>QT += network</code></td> > </tr> > <tr> > <td>继承</td> > <td>QObject</td> > </tr> > <tr> > <td>继承者</td> > <td>QSctpServer</td> > </tr> > </tbody> > </table> > > **详细说明:** > > * 此类可以接受传入的TCP连接。您可以指定端口或让QTcpServer自动选择一个端口。您可以监听一个特定的地址或所有机器的地址。 > * 调用listen()让服务器侦听传入的连接。然后,每当客户端连接到服务器时,就会发出newConnection()信号。 > * 调用nextPendingConnection()接受挂起的连接作为已连接的QTcpSocket。该函数返回一个指向QAbstractSocket::ConnectedState中的QTcpSocket的指针,您可以使用该指针与客户端通信。 > * 如果发生错误,serverError()返回错误的类型,可以调用errorString()来获取对发生的事情的人类可读的描述。 > * 当侦听连接时,服务器正在侦听的地址和端口作为serverAddress()和serverPort()可用。 > * 调用close()使QTcpServer停止侦听传入的连接。 > * 尽管QTcpServer主要是为与事件循环一起使用而设计的,但也可以不使用事件循环而使用它。在这种情况下,您必须使用waitForNewConnection(),它将阻塞直到连接可用或超时。 > 官方文档:[https://doc.qt.io/qt-5/qtcpserver.html][https_doc.qt.io_qt-5_qtcpserver.html] ## 成员函数 ## ### QTcpServer ### > **原型:** > > QTcpServer::QTcpServer(QObject *parent = nullptr) > > **功能:** > > * 构造一个QTcpServer对象 > * See also `listen()` and`setSocketDescriptor().` ### ~QTcpServer() ### > **原型:** > > [virtual]QTcpServer::~QTcpServer() > > **功能:** > > * 销毁QTcpServer对象。如果服务器正在监听连接,套接字将自动关闭。 > * 在删除服务器之前,任何仍然连接的客户端qtcpsocket必须断开连接或重新连接 > * 参见`close()`。 ### close ### > **原型:** > > void QTcpServer::close() > > **功能:** > > * 关闭服务器。服务器将不再监听传入的连接。 > * See also `listen().` ### acceptError ### > **原型:** > > [signal]void QTcpServer::acceptError(QAbstractSocket::SocketError socketError) > > **功能:** > > * 这是一个信号 > * 接受新连接导致错误时,将发出此信号。该socketError参数描述错误的发生的类型。 > * 这个函数是在Qt 5.0中引入的。 > * See also`pauseAccepting()`and `resumeAccepting().` ### serverError ### > **原型:** > > QString QTcpServer::errorString() const > > **功能:** > > * 返回上次发生的错误的错误码。 > * 另请参见`errorString()`。 ### errorString ### > **原型:** > > QAbstractSocket::SocketError QTcpServer::serverError() const > > **功能:** > > * 返回最近发生的错误的人类可读的描述。 > * 另请参见`serverError()`。 ### newConnection ### > **原型:** > > [signal]void QTcpServer::newConnection() > > **功能:** > > * 这是一个信号 > * 每当有新的连接可用时,都会发出此信号。 > * See also `hasPendingConnections()`and`nextPendingConnection().` ### setMaxPendingConnections ### > **原型:** > > void QTcpServer::setMaxPendingConnections(int numConnections) > > **功能:** > > * 将待处理的接受连接的最大数量设置为numConnections。在调用nextPendingConnection()之前,QTcpServer最多接受numConnections个传入连接。默认情况下,限制为30个挂起的连接。 > * 服务器达到其最大未决连接数后,客户端仍可能能够连接(即QTcpSocket仍可以发出connectd()信号)。QTcpServer将停止接受新连接,但是操作系统仍可以将它们保持在队列中。 > * 另请参见maxPendingConnections()和hasPendingConnections()。 ### hasPendingConnections ### > **原型:** > > [virtual]bool QTcpServer::hasPendingConnections() const > > **功能:** > > * 如果服务器有挂起的连接,则返回true;否则返回false。 > * 另请参见`nextPendingConnection()`和`setMaxPendingConnections()。` ### addPendingConnection ### > **原型:** > > [protected]void QTcpServer::addPendingConnection(QTcpSocket *socket) > > **功能:** > > * 该函数由QTcpServer :: incomingConnection()调用,以将套接字添加到未决传入连接的列表中。 > * 注意:如果你不想破坏挂起的连接机制,不要忘记从重新实现的incomingConnection()调用这个成员。 > * 此功能在Qt 4.7中引入。 > * 另请参见`incomingConnection()`。 ### maxPendingConnections ### > **原型:** > > int QTcpServer::maxPendingConnections() const > > **功能:** > > * 返回待处理的已接受连接的最大数目。默认值为30。 ### nextPendingConnection ### > **原型:** > > [virtual]QTcpSocket *QTcpServer::nextPendingConnection() > > **功能:** > > * 返回下一个挂起的连接,作为连接的QTcpSocket对象。 > * 套接字是作为服务器的一个子对象创建的,这意味着当QTcpServer对象被销毁时,它会被自动删除。在使用完对象后,显式地删除它仍然是一个好主意,以避免浪费内存。 > * 如果在没有挂起的连接时调用此函数,则返回nullptr。 > * 注意:返回的QTcpSocket对象不能在另一个线程中使用。如果要使用来自另一个线程的传入连接,则需要重写incomingConnection()。 > * 另请参见`hasPendingConnections()。` ### incomingConnection ### > **原型:** > > [virtual protected]void QTcpServer::incomingConnection(qintptr socketDescriptor) > > **功能:** > > * 当新连接可用时,此虚拟函数将由`QTcpServer`调用。该`socketDescriptor`参数是接受的连接本地套接字描述符。 > * 基本实现创建一个QTcpSocket,设置套接字描述符,然后将QTcpSocket存储在挂起连接的内部列表中。最后,发出newConnection()。 > * 重新实现此函数,以在连接可用时改变服务器的行为。 > * 如果这个服务器正在使用QNetworkProxy,那么socketDescriptor可能不能用于本机套接字函数,而应该仅与QTcpSocket::setSocketDescriptor()一起使用。 > * 注意:如果在重新实现该方法时创建了另一个套接字,则需要通过调用`addPendingConnection()`将其添加到挂起连接机制中。 > * 注意:如果您想在另一个线程中将传入的连接作为一个新的QTcpSocket对象来处理,您必须将socketDescriptor传递给另一个线程,并在那里创建QTcpSocket对象,并使用其setSocketDescriptor()方法。 > * 另请参阅newConnection()、nextPendingConnection()和addPendingConnection()。 ### waitForNewConnection ### > **原型:** > > bool QTcpServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr) > > **功能:** > > * 最多等待msec毫秒,或直到传入连接可用。 > * 如果连接可用则返回true;否则返回false。 > * 如果操作超时且timedOut不是nullptr, \*timedOut将被设置为true。 > * 这是一个阻塞函数调用。在单线程GUI应用程序中不建议使用它,因为整个应用程序将停止响应,直到函数返回为止。waitForNewConnection()在没有事件循环时非常有用。 > * 非阻塞替代方法是连接到newConnection()信号。 > * 如果毫秒为-1,则此功能不会超时。 > * 另请参见`hasPendingConnections()`和`nextPendingConnection()。` ### pauseAccepting ### > **原型:** > > void QTcpServer::pauseAccepting() > > **功能:** > > * 暂停接受新的连接。排队的连接将保留在队列中。 > * 此功能是在Qt 5.0中引入的。 > * 另请参见`resumeAccepting()`。 ### resumeAccepting ### > **原型:** > > void QTcpServer::resumeAccepting() > > **功能:** > > * 恢复接受新连接 > * 此功能是在Qt 5.0中引入的。 > * 另请参见`pauseAccepting()`。 ### setSocketDescriptor ### > **原型:** > > bool QTcpServer::setSocketDescriptor(qintptr socketDescriptor) > > **功能:** > > * 设置该服务器侦听到socketDescriptor的传入连接时应使用的套接字描述符。如果成功设置套接字,则返回true;否则返回false。 > * 假定套接字处于侦听状态 > * 另请参见`socketDescriptor()`和`isListening()`。 ### socketDescriptor ### > **原型:** > > qintptr QTcpServer::socketDescriptor() const > > **功能:** > > * 返回服务器用来监听传入指令的本机套接字描述符,如果服务器没有监听,则返回-1。 > * 如果服务器正在使用QNetworkProxy,则返回的描述符可能不能用于本机套接字函数。 > * 另请参见`setSocketDescriptor()`和`isListening()`。 ### serverAddress ### > **原型:** > > QHostAddress QTcpServer::serverAddress() const > > **功能:** > > * 如果服务器正在监听连接,则返回服务器的地址;否则返回QHostAddress::Null.。 > * See also `serverPort()`and `listen().` ### serverPort ### > **原型:** > > quint16 QTcpServer::serverPort() const > > **功能:** > > * 如果服务器正在监听连接,则返回服务器的端口;否则返回0。 > * See also `serverAddress()`and `listen().` ### isListening ### > **原型:** > > bool QTcpServer::isListening() const > > **功能:** > > * 如果服务器当前正在监听传入的连接,则返回true;否则返回false。 > * See also `listen().` ### listen ### > **原型:** > > bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) > > **功能:** > > * 告诉服务器侦听地址address和port port上的传入连接。如果port为0,则自动选择一个端口。如果address为QHostAddress :: Any,则服务器将在所有网络接口上侦听。 ### proxy ### > **原型:** > > QNetworkProxy QTcpServer::proxy() const > > **功能:** > > * 返回此套接字的网络代理。默认情况下使用QNetworkProxy::DefaultProxy。 > * 这个函数是在Qt 4.1中引入的。 > * 另请参阅`setProxy()`和`QNetworkProxy。` ### setProxy ### > **原型:** > > void QTcpServer::setProxy(const QNetworkProxy &networkProxy) > > **功能:** > > * 将此套接字的显式网络代理设置为networkProxy。 > * 要禁用对此套接字使用代理,请使用·QNetworkProxy :: NoProxy代理类型: > > server->setProxy(QNetworkProxy::NoProxy); > > * 此功能在Qt 4.1中引入。 > * 另请参见`proxy()`和`QNetworkProxy。` [https_doc.qt.io_qt-5_qtcpsocket.html]: https://doc.qt.io/qt-5/qtcpsocket.html [https_doc.qt.io_qt-5_qtcpserver.html]: https://doc.qt.io/qt-5/qtcpserver.html
还没有评论,来说两句吧...