class QTcpServer#

QTcpServer 类提供了一个基于 TCP 的服务器。更多信息…

Inheritance diagram of PySide6.QtNetwork.QTcpServer

继承自: QSslServer

概述

方法

虚方法

信号#

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式反馈给我们

详细描述#

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

调用 listen() 使服务器侦听传入连接。每次客户端连接到服务器时,都会发出newConnection() 信号。当客户端连接通过addPendingConnection() 函数添加到挂起连接队列时,会发出pendingConnectionAvailable() 信号。

调用 nextPendingConnection() 来接受挂起的连接作为已连接的QTcpSocket。此函数返回一个指向处于ConnectedStateQTcpSocket 的指针,您可以使用它来与客户端通信。

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

当监听连接时,服务器监听的地址和端口可以通过 serverAddress()serverPort() 获取。

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

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

参见

QTcpSocket Fortune Server Threaded Fortune Server Torrent Example

__init__([parent=None])#
参数:

parentQObject

构造一个 QTcpServer 对象。

parent 传递给 QObject 构造函数。

acceptError(socketError)#
参数:

socketErrorSocketError

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

addPendingConnection(套接字)#
参数:

套接字QTcpSocket

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

注意

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

close()#

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

参见

listen()

errorString()#
返回类型:

str

返回最后一次发生的错误的可读描述。

参见

serverError()

hasPendingConnections()#
返回类型:

bool

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

incomingConnection(handle)#
参数:

handleqintptr

当有新的连接可用时,由 QTcpServer 调用此虚拟函数。接受的连接的本地套接字描述符为 socketDescriptor 参数。

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

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

如果此服务器使用QNetworkProxy,则可能无法使用原生套接字函数的socketDescriptor,应仅使用setSocketDescriptor()

注意

如果在该方法的重写中创建了另一个套接字,则需要通过调用addPendingConnection()将其添加到悬挂连接机制。

注意

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

isListening()#
返回类型:

bool

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

参见

listen()

listen([address=QHostAddress.Any[, port=0]])#
参数:
返回类型:

bool

指示服务器在指定地址 address 和端口 port 上监听传入连接。如果 port 为 0,系统将自动选择一个端口号。如果 addressAny ,则服务器将在所有网络接口上监听。

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

参见

isListening()

listenBacklogSize()#
返回类型:

int

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

maxPendingConnections()#
返回类型:

int

返回等待接受的连接的最大数量。默认为 30。

newConnection()#

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

nextPendingConnection()#
返回类型:

QTcpSocket

返回下一个等待连接作为连接的 QTcpSocket 对象。

此套接字作为服务器的子对象创建,这意味着当 QTcpServer 对象被销毁时,它将被自动删除。仍然建议在完成操作后明确删除对象,以避免内存浪费。

在没有等待连接时调用此函数将返回 None

注意

返回的 QTcpSocket 对象不能在另一个线程中使用。如果您想从另一个线程中使用传入连接,您需要重写 incomingConnection()

pauseAccepting()#

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

pendingConnectionAvailable()#

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

proxy()#
返回类型:

QNetworkProxy

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

resumeAccepting()#

重新开始接受新连接。

serverAddress()#
返回类型:

QHostAddress

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

serverError()#
返回类型:

SocketError

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

参见

errorString()

serverPort()#
返回类型:

int

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

setListenBacklogSize(size)#
参数:

size – int

将待接受连接的等待队列大小设置为 size。操作系统可能会减少或忽略此值。默认情况下,队列大小为 50。

注意

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

setMaxPendingConnections(numConnections)#
参数:

numConnections – int

设置已接受的连接请求数量的最大值为 numConnections。在调用 nextPendingConnection() 之前,QTcpServer 将不会处理超过 numConnections 个传入连接。默认情况下,最大请求数为 30。

即使服务器已达到最大请求数量(即 QTcpSocket 仍可发射 connected() 信号),客户端仍可能建立连接。在这种情况下,QTcpServer 将停止接受新的连接,但操作系统可能仍然在某些队列中保留这些连接。

setProxy(networkProxy)#
参数:

networkProxyQNetworkProxy

警告

本节包含自动从 C++ 转换为 Python 的代码片段,可能存在错误。

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

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

server.setProxy(QNetworkProxy.NoProxy)
setSocketDescriptor(socketDescriptor)#
参数:

socketDescriptorqintptr

返回类型:

bool

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

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

socketDescriptor()#
返回类型:

qintptr

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

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

waitForNewConnection(msec)#
参数:

msec – int

返回类型:

(retval, timedOut)

等待最多 msec 毫秒或直到有传入连接可用。如果存在连接返回 true;否则返回 false。如果操作超时并且 timedOut 不是 None,则 * ``timedOut`` 将设置为 true。

这是一个阻塞函数调用。不建议在单线程GUI应用程序中使用它,因为整个应用程序将停止响应,直到函数返回。waitForNewConnection()主要用于没有事件循环可用的情况。

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

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