class QLocalServer#

QLocalServer提供了一个基于本地套接字的服务器。 更多信息

Inheritance diagram of PySide6.QtNetwork.QLocalServer

摘要#

属性#

方法#

虚方法#

信号#

静态函数#

注意

此文档可能包含自动从C++转换到Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建票据来告诉我们

详细说明#

此类提供了接受传入本地套接字连接的功能。

调用 listen(),以使服务器开始在指定密钥上监听传入连接。每当客户端连接到服务器时,都会发出 newConnection() 信号。

调用 nextPendingConnection() 接受挂起的连接作为连接的 QLocalSocket 。该函数返回一个指向 QLocalSocket 的指针,可以用来与客户端通信。

如果发生错误,serverError() 返回错误类型,并且可以通过调用 errorString() 获取所发生情况的易于理解描述。

在监听连接时,服务器正在监听的名字可以通过 serverName() 获取。

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

虽然 QLocalServer 设计用于与事件循环一起使用,但也可以在不使用事件循环的情况下使用。在这种情况下,您必须使用 waitForNewConnection(),该函数将阻塞,直到有连接可用或超时。

另请参阅

QLocalSocket QTcpServer

class SocketOption#

(继承自 enum.Flag)此枚举描述了用于创建套接字的可能选项。这将在支持套接字访问权限的平台(Linux、Windows)上更改访问权限。在Linux和Android上,可以使用具有抽象地址的套接字;对于此类套接字,套接字权限没有意义。在Linux上,GroupAccess和OtherAccess可能的含义略有不同,具体取决于平台。

常量

描述

QLocalServer.NoOptions

未设置任何访问限制。

QLocalServer.UserAccessOption

访问限制为创建套接字的同一进程的用户。

QLocalServer.GroupAccessOption

在Linux上,访问限制为创建套接字的同一组但不是用户。在Windows上,访问限制为进程的主要组。

QLocalServer.OtherAccessOption

在Linux上,访问对所有用户但不是创建套接字用户和用户组可用。在Windows上,对所有人可用。

QLocalServer.WorldAccessOption

没有访问限制。

QLocalServer.AbstractNamespaceOption

监听套接字将创建在抽象命名空间中。此标志仅适用于Linux。在其他平台上,为了保持代码的可移植性,此标志相当于WorldAccessOption。

另请参阅

socketOptions

注意

当使用 from __feature__ import true_property 时可以直接使用属性,否则通过访问器函数使用。

property socketOptionsᅟ: Combination of QLocalServer.SocketOption#

此属性包含用于控制套接字操作的套接字选项。

例如,套接字可以限制仅允许哪些用户ID连接到套接字。

必须在调用 listen() 方法之前设置这些选项。

在某些情况下,例如在Linux上的Unix域套接字中,对套接字的访问将由文件系统权限确定,并且将基于umask创建。设置访问标志将覆盖此设置,并将按指定的限制或允许访问。

其他基于Unix的操作系统,例如macOS,不尊重Unix域套接字的文件权限,默认启用WorldAccess,这些权限标志将不起作用。

在Windows上,UserAccessOption 足以允许非提升进程连接到由提升进程创建的本地服务器(该进程由同一用户运行)。GroupAccessOption 指的是进程的主要组(请参阅Windows文档中的TokenPrimaryGroup)。OtherAccessOption 指的是众所周知的“Everyone”组。

在Linux平台上,可以在抽象命名空间中创建套接字,它与文件系统无关。使用这种类型的套接字意味着忽略权限选项。在其他平台上,AbstractNamespaceOption 等同于 WorldAccessOption .

默认情况下,没有任何标志被设置,访问权限是平台默认设置。

另请参阅

listen()

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

parentQObject

使用指定的 parent 创建一个新的本地套接字服务器。

另请参阅

listen()

close()#

停止监听传入的连接。现有连接不受影响,但任何新的连接都将被拒绝。

另请参阅

isListening()listen()

errorString()#
返回类型:

str

返回与当前通过 serverError() 报告的错误相应的可读消息。如果没有合适的字符串可用,则返回空字符串。

另请参阅

serverError()

fullServerName()#
返回类型:

str

返回服务器正在监听上的完整路径。

注意:这取决于平台

另请参阅

listen()serverName()

hasPendingConnections()#
返回类型:

bool

如果服务器有一个挂起的连接,则返回 true;否则返回 false

incomingConnection( socketDescriptor )#
参数:

socketDescriptorquintptr

该虚函数在可用新的连接时由QLocalServer调用。socketDescriptor是已接受连接的原生套接字描述符。

基本实现会创建一个QLocalSocket,设置套接字描述符,然后将QLocalSocket存储在内部待处理连接列表中。最后触发newConnection()事件。

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

isListening()#
返回类型:

bool

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

另请参阅

listen() close()

listen(name)#
参数:

name – str

返回类型:

bool

告诉服务器在name上监听传入连接。如果服务器当前正在监听,则将返回false。成功时返回true,否则返回false。

name可以是一个单一名称,并且QLocalServer将确定正确的平台特定路径。serverName()将返回传递给listen的名称。

通常您只需传递一个类似于“foo”的名称,但在Unix上这也可以是一个路径,例如“/tmp/foo”,在Windows上则可以是管道路径,例如“\\.\pipe\foo”。

注意

在Unix上,如果服务器在没有关闭的情况下崩溃,则listen将因AddressInUseError而失败。要创建新服务器,应删除文件。在Windows上,两个本地服务器可以同时监听同一管道,但任何连接都只会发送到其中一个服务器。

listen(socketDescriptor)
参数:

socketDescriptorqintptr

返回类型:

bool

指示服务器在 socketDescriptor 上监听传入的连接。如果服务器当前正在监听,则该属性返回 false。成功时返回 true;否则返回 false。套接字必须准备好接受新的连接,而无需调用任何其他特定平台的函数。套接字设置为非阻塞模式。

serverName()fullServerName() 可能返回一个包含名称的字符串,如果平台支持该选项,否则返回一个空的 QString。特别是,如果 Linux 支持的抽象命名空间中的套接字地址包含不可打印字符,则不会产生有用的名称。

另请参阅

isListening() close()

listenBacklogSize()#
返回类型:

int

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

另请参阅

setListenBacklogSize()

maxPendingConnections()#
返回类型:

int

返回可接受的最大挂起连接数。默认为 30。

newConnection()#

每次有新的连接可用时,都会发出此信号。

nextPendingConnection()#
返回类型:

QLocalSocket

以连接的 QLocalSocket 对象返回下一个挂起的连接。

套接字以服务器子进程的形式创建,这意味着当QLocalServer对象被销毁时,它会自动删除。但是,当您完成使用后仍然显式地删除对象是一个好习惯,以防止内存浪费。

如果没有挂起的连接而调用此函数,将返回None

另请参阅

hasPendingConnections() newConnection() incomingConnection()

static removeServer(name)#
参数:

name – str

返回类型:

bool

删除任何可能阻止listen()调用的服务器实例,并在成功时返回true,否则返回false。该函数旨在从崩溃中恢复,当之前的服务器实例尚未清理时。

在Windows上,此函数不执行任何操作;在Unix上,它删除由name给出的套接字文件。

警告

请小心,以避免删除正在运行的实例的套接字。

serverError()#
返回类型:

SocketError

返回最后发生的错误类型或NoError

另请参阅

errorString()

serverName()#
返回类型:

str

如果服务器正在监听连接,则返回服务器名称;否则返回QString()。

另请参阅

listen() fullServerName()

setListenBacklogSize(size)#
参数:

size – int

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

注意

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

另请参阅

listenBacklogSize()

setMaxPendingConnections(numConnections)#
参数:

numConnections – int

设置最大待接受连接数为 numConnections。在调用 nextPendingConnection() 之前,QLocalServer 将不接受超过 numConnections 的输入连接。

注意:尽管当 QLocalServer 达到其最大待连接数后,将停止接受新连接,但操作系统可能仍在队列中保留这些连接,这可能会导致客户端发出已连接的信号。

setSocketOptions(options)#
参数:

options – 结合 SocketOption

另请参阅

socketOptions()

属性 socketOptions-- 的设定器。

socketDescriptor()#
返回类型:

qintptr

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

描述符的类型取决于平台

  • 在 Windows 上,返回值是一个 Winsock 2 套接字句柄。

  • 在 INTEGRITY 上,返回值是 QTcpServer 套接字描述符,其类型由 socketDescriptor 定义。

  • 在所有其他类 UNIX 操作系统上,类型是代表监听套接字的文件描述符。

另请参阅

listen()

socketOptions()#
返回类型:

结合 SocketOption

返回设置在套接字上的套接字选项。

另请参阅

setSocketOptions()

属性 socketOptions-- 的获取器。

waitForNewConnection(msec)#
参数:

msec – int

返回类型:

(返回值,超时标志)

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

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

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

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