- class QLocalServer#
类
QLocalServer
提供了一个基于本地套接字的服务器。 更多信息…摘要#
属性#
socketOptionsSz
- 控制套接字如何操作的套接字选项
方法#
def
__init__()
def
close()
def
errorString()
def
fullServerName()
def
isListening()
def
listen()
def
serverError()
def
serverName()
def
socketOptions()
虚方法#
信号#
静态函数#
注意
此文档可能包含自动从C++转换到Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建票据来告诉我们
详细说明#
此类提供了接受传入本地套接字连接的功能。
调用
listen()
,以使服务器开始在指定密钥上监听传入连接。每当客户端连接到服务器时,都会发出newConnection()
信号。调用
nextPendingConnection()
接受挂起的连接作为连接的QLocalSocket
。该函数返回一个指向QLocalSocket
的指针,可以用来与客户端通信。如果发生错误,
serverError()
返回错误类型,并且可以通过调用errorString()
获取所发生情况的易于理解描述。在监听连接时,服务器正在监听的名字可以通过
serverName()
获取。调用
close()
使QLocalServer
停止监听传入连接。虽然
QLocalServer
设计用于与事件循环一起使用,但也可以在不使用事件循环的情况下使用。在这种情况下,您必须使用waitForNewConnection()
,该函数将阻塞,直到有连接可用或超时。另请参阅
- 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。
另请参阅
注意
当使用
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
.默认情况下,没有任何标志被设置,访问权限是平台默认设置。
另请参阅
使用指定的
parent
创建一个新的本地套接字服务器。另请参阅
- close()#
停止监听传入的连接。现有连接不受影响,但任何新的连接都将被拒绝。
另请参阅
- errorString()#
- 返回类型:
str
返回与当前通过
serverError()
报告的错误相应的可读消息。如果没有合适的字符串可用,则返回空字符串。另请参阅
- fullServerName()#
- 返回类型:
str
返回服务器正在监听上的完整路径。
注意:这取决于平台
另请参阅
- hasPendingConnections()#
- 返回类型:
bool
如果服务器有一个挂起的连接,则返回
true
;否则返回false
。- incomingConnection( socketDescriptor )#
- 参数:
socketDescriptor –
quintptr
该虚函数在可用新的连接时由
QLocalServer
调用。socketDescriptor
是已接受连接的原生套接字描述符。基本实现会创建一个
QLocalSocket
,设置套接字描述符,然后将QLocalSocket
存储在内部待处理连接列表中。最后触发newConnection()
事件。重新实现此函数以更改服务器在有可用的连接时的行为。
- isListening()#
- 返回类型:
bool
如果服务器正在监听传入连接,则返回
true
,否则返回false。- 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)
- 参数:
socketDescriptor –
qintptr
- 返回类型:
bool
指示服务器在
socketDescriptor
上监听传入的连接。如果服务器当前正在监听,则该属性返回false
。成功时返回true
;否则返回false
。套接字必须准备好接受新的连接,而无需调用任何其他特定平台的函数。套接字设置为非阻塞模式。serverName()
、fullServerName()
可能返回一个包含名称的字符串,如果平台支持该选项,否则返回一个空的 QString。特别是,如果 Linux 支持的抽象命名空间中的套接字地址包含不可打印字符,则不会产生有用的名称。另请参阅
- listenBacklogSize()#
- 返回类型:
int
返回待接受连接的后台队列大小。
- maxPendingConnections()#
- 返回类型:
int
返回可接受的最大挂起连接数。默认为 30。
- newConnection()#
每次有新的连接可用时,都会发出此信号。
- nextPendingConnection()#
- 返回类型:
以连接的
QLocalSocket
对象返回下一个挂起的连接。套接字以服务器子进程的形式创建,这意味着当
QLocalServer
对象被销毁时,它会自动删除。但是,当您完成使用后仍然显式地删除对象是一个好习惯,以防止内存浪费。如果没有挂起的连接而调用此函数,将返回
None
。另请参阅
hasPendingConnections()
newConnection()
incomingConnection()
- static removeServer(name)#
- 参数:
name – str
- 返回类型:
bool
删除任何可能阻止
listen()
调用的服务器实例,并在成功时返回true
,否则返回false
。该函数旨在从崩溃中恢复,当之前的服务器实例尚未清理时。在Windows上,此函数不执行任何操作;在Unix上,它删除由
name
给出的套接字文件。警告
请小心,以避免删除正在运行的实例的套接字。
- serverError()#
- 返回类型:
返回最后发生的错误类型或
NoError
。另请参阅
- serverName()#
- 返回类型:
str
如果服务器正在监听连接,则返回服务器名称;否则返回QString()。
另请参阅
listen()
fullServerName()
- setListenBacklogSize(size)#
- 参数:
size – int
将接受的连接的backlog队列大小设置为
size
。操作系统可能会降低或忽略此值。默认情况下,队列大小为50。- setMaxPendingConnections(numConnections)#
- 参数:
numConnections – int
设置最大待接受连接数为
numConnections
。在调用nextPendingConnection()
之前,QLocalServer
将不接受超过numConnections
的输入连接。注意:尽管当
QLocalServer
达到其最大待连接数后,将停止接受新连接,但操作系统可能仍在队列中保留这些连接,这可能会导致客户端发出已连接的信号。- setSocketOptions(options)#
- 参数:
options – 结合
SocketOption
另请参阅
属性
socketOptions--
的设定器。- socketDescriptor()#
- 返回类型:
qintptr
返回服务器使用的本地套接字描述符以监听传入指令,如果服务器没有在监听,则返回 -1。
描述符的类型取决于平台
在 Windows 上,返回值是一个 Winsock 2 套接字句柄。
在 INTEGRITY 上,返回值是
QTcpServer
套接字描述符,其类型由socketDescriptor
定义。在所有其他类 UNIX 操作系统上,类型是代表监听套接字的文件描述符。
另请参阅
- socketOptions()#
- 返回类型:
结合
SocketOption
返回设置在套接字上的套接字选项。
另请参阅
属性
socketOptions--
的获取器。- waitForNewConnection(msec)#
- 参数:
msec – int
- 返回类型:
(返回值,超时标志)
等待最多
msec
毫秒或直到有传入连接可用。如果连接可用,则返回true
;否则返回false
。如果操作超时且timedOut
不为None
,则 *timedOut 将设置为 true。这是一个阻塞函数调用。在单线程的 GUI 应用程序中使用它是不可取的,因为整个应用程序都会停止响应,直到函数返回。waitForNewConnection() 主要在有事件循环不可用的情况下使用。
非阻塞的替代方法是连接到
newConnection()
信号。如果 msec 为 -1,则此函数不会超时。