PySide6.QtNetwork.QLocalServer¶
- class QLocalServer¶
QLocalServer
类提供了一个基于本地套接字的服务器。更多…概要¶
属性¶
socketOptionsᅟ
- 控制套接字操作的套接字选项
方法¶
def
__init__()
def
close()
def
errorString()
def
fullServerName()
def
isListening()
def
listen()
def
serverError()
def
serverName()
def
socketOptions()
虚拟方法¶
信号¶
def
newConnection()
静态函数¶
def
removeServer()
注意
本文档可能包含从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)上的访问权限。GroupAccess 和 OtherAccess 的含义可能因平台而略有不同。在 Linux 和 Android 上,可以使用具有抽象地址的套接字;对于此类套接字,套接字权限没有意义。常量
描述
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
。默认情况下,没有设置任何标志,访问权限是平台的默认值。
另请参阅
- Access functions:
使用给定的
parent
创建一个新的本地套接字服务器。另请参阅
- addPendingConnection(socket)¶
- Parameters:
socket –
QLocalSocket
此函数由
incomingConnection()
调用,用于将socket
添加到待处理的传入连接列表中。注意
如果你不想破坏待处理连接机制,请不要忘记从重新实现的
incomingConnection()
中调用此成员。此函数在添加套接字后发出newConnection()
信号。- close()¶
停止监听传入的连接。现有的连接不会受到影响,但任何新的连接将被拒绝。
另请参阅
- errorString()¶
- Return type:
字符串
返回与
serverError()
报告的当前错误相对应的人类可读消息。如果没有合适的字符串可用,则返回空字符串。另请参阅
- fullServerName()¶
- Return type:
字符串
返回服务器正在监听的完整路径。
注意:这是平台特定的
另请参阅
- hasPendingConnections()¶
- Return type:
布尔
如果服务器有挂起的连接,则返回
true
;否则返回false
。- incomingConnection(socketDescriptor)¶
- Parameters:
socketDescriptor –
quintptr
当有新连接可用时,
QLocalServer
会调用此虚拟函数。socketDescriptor
是已接受连接的本机套接字描述符。基础实现创建了一个
QLocalSocket
,设置了套接字描述符,然后将QLocalSocket
存储在待处理连接的内部列表中。最后发出newConnection()
。重新实现此函数以在连接可用时更改服务器的行为。
- isListening()¶
- Return type:
布尔
如果服务器正在监听传入连接,则返回
true
,否则返回 false。- listen(name)¶
- Parameters:
name – str
- Return type:
布尔
告诉服务器在
name
上监听传入的连接。如果服务器当前正在监听,则返回false。成功时返回true,否则返回false。name
可以是单个名称,QLocalServer
将确定正确的平台特定路径。serverName()
将返回传递给 listen 的名称。通常你只需要传入一个像“foo”这样的名称,但在Unix上,这也可能是一个路径,如“/tmp/foo”,在Windows上,这可能是一个管道路径,如“\\.\pipe\foo”
注意
在Unix系统上,如果服务器崩溃而没有关闭监听,将会出现AddressInUseError错误。要创建新的服务器,应该删除该文件。在Windows系统上,两个本地服务器可以同时监听同一个管道,但任何连接都将连接到其中一个服务器。
- listen(socketDescriptor)
- Parameters:
socketDescriptor –
qintptr
- Return type:
布尔
指示服务器在
socketDescriptor
上监听传入的连接。如果服务器当前正在监听,该属性返回false
。成功时返回true
;否则返回false
。套接字必须准备好接受新连接,无需调用额外的平台特定函数。套接字设置为非阻塞模式。serverName()
,fullServerName()
如果平台支持此选项,可能会返回一个带有名称的字符串;否则,它们将返回一个空的QString。特别是,如果Linux支持的抽象命名空间中的套接字地址包含不可打印的字符,则不会产生有用的名称。另请参阅
- listenBacklogSize()¶
- Return type:
整数
返回待接受连接的积压队列大小。
- maxPendingConnections()¶
- Return type:
整数
返回待处理接受连接的最大数量。默认值为30。
- newConnection()¶
每次有新连接可用时都会发出此信号。
- nextPendingConnection()¶
- Return type:
返回下一个待处理的连接作为一个已连接的
QLocalSocket
对象。套接字作为服务器的子对象创建,这意味着当
QLocalServer
对象被销毁时,它会自动删除。当你使用完它后,显式删除对象仍然是一个好主意,以避免浪费内存。None
如果没有挂起的连接时调用此函数,则返回。- static removeServer(name)¶
- Parameters:
name – str
- Return type:
布尔
移除可能导致调用
listen()
失败的服务器实例,并在成功时返回true
;否则返回false
。此函数旨在从前一个服务器实例未清理的崩溃中恢复。在Windows上,此函数不执行任何操作;在Unix上,它会删除由
name
指定的套接字文件。警告
小心避免移除正在运行的实例的套接字。
- serverError()¶
- Return type:
返回最后发生的错误类型或
NoError
。另请参阅
- serverName()¶
- Return type:
字符串
如果服务器正在监听连接,则返回服务器名称;否则返回QString()
另请参阅
- setListenBacklogSize(size)¶
- Parameters:
size – int
设置待接受连接的积压队列大小为
size
。操作系统可能会减少或忽略此值。默认情况下,队列大小为50。- setMaxPendingConnections(numConnections)¶
- Parameters:
numConnections – int
设置待处理接受连接的最大数量为
numConnections
。QLocalServer
在调用nextPendingConnection()
之前,将不会接受超过numConnections
的传入连接。注意:即使
QLocalServer
在达到最大挂起连接数后停止接受新连接,操作系统仍可能将它们保留在队列中,这会导致客户端信号显示它已连接。- setSocketOptions(options)¶
- Parameters:
options –
SocketOption
的组合
另请参阅
属性
socketOptionsᅟ
的设置器。- socketDescriptor()¶
- Return type:
qintptr
返回服务器用于监听传入指令的本机套接字描述符,如果服务器未在监听,则返回-1。
描述符的类型取决于平台:
在Windows上,返回的值是一个Winsock 2套接字句柄。
在INTEGRITY上,返回的值是
QTcpServer
套接字描述符,类型由socketDescriptor
定义。在所有其他类UNIX操作系统上,类型是一个表示监听套接字的文件描述符。
另请参阅
- socketOptions()¶
- Return type:
SocketOption
的组合
返回设置在套接字上的套接字选项。
另请参阅
属性
socketOptionsᅟ
的获取器。- waitForNewConnection(msec)¶
- Parameters:
毫秒 – 整数
- Return type:
(retval, timedOut)
最多等待
msec
毫秒或直到有传入连接可用。如果有连接可用,则返回true
;否则返回false
。如果操作超时且timedOut
不是None
,*timedOut 将被设置为 true。这是一个阻塞函数调用。在单线程的GUI应用程序中使用它是不明智的,因为整个应用程序将停止响应,直到函数返回。waitForNewConnection()在没有事件循环可用时最为有用。
非阻塞的替代方法是连接到
newConnection()
信号。如果 msec 为 -1,此函数将不会超时。