QLocalServer 类
QLocalServer 类提供了一个基于本地套接字的服务器。 更多...
头文件 | #include <QLocalServer> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
继承自 | QObject |
公共类型
枚举 | SocketOption { NoOptions, UserAccessOption, GroupAccessOption, OtherAccessOption, WorldAccessOption, AbstractNamespaceOption } |
标志 | SocketOptions |
属性
- socketOptions : SocketOptions
公共函数
QLocalServer(QObject *parent = nullptr) | |
虚拟 | ~QLocalServer() |
QBindable<QLocalServer::SocketOptions> | bindableSocketOptions() |
void | close() |
QString | errorString() const |
QString | fullServerName() const |
虚拟 bool | hasPendingConnections() const |
bool | isListening() const |
bool | listen(const QString &name) |
bool | listen(qintptr socketDescriptor) |
(自 6.3) int | listenBacklogSize() const |
int | maxPendingConnections() const |
虚拟 QLocalSocket * | nextPendingConnection() |
QAbstractSocket::SocketError | serverError() const |
QString | serverName() const |
(自 6.3) void | setListenBacklogSize(int size) |
void | setMaxPendingConnections(int numConnections) |
void | setSocketOptions(QLocalServer::SocketOptions options) |
qintptr | socketDescriptor() const |
QLocalServer::SocketOptions | socketOptions() const |
bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
信号
void | newConnection() |
静态公共成员
bool | removeServer(const QString &name) |
受保护的函数
虚拟 void | incomingConnection(quintptr socketDescriptor) |
详细描述
此类使得接受传入的本地套接字连接成为可能。
调用 listen() 使服务器在指定键上开始监听传入的连接。每当客户端连接到服务器时,就会发出 newConnection() 信号。
调用 nextPendingConnection() 将挂起的连接接受为已连接的 QLocalSocket。该函数返回一个指向 QLocalSocket 的指针,该指针可用于与客户端进行通信。
如果发生错误,serverError() 返回错误类型,可以通过调用 errorString() 获取其发生事件的描述。
当监听连接时,正在监听的名字可以通过 serverName() 获取。
调用 close() 使 QLocalServer 停止监听传入的连接。
尽管 QLocalServer 是为使用事件循环而设计的,但它也可以在没有事件循环的情况下使用。在这种情况下,必须使用 waitForNewConnection(),它将在可用连接或超时到期时阻塞。
另请参阅 QLocalSocket 和 QTcpServer。
成员类型文档
enum QLocalServer::SocketOption
flags QLocalServer::SocketOptions
该枚举描述了可以用于创建套接字的选项。这改变了支持套接字访问权限的 Linux、Windows 等平台上的访问权限。根据平台,GroupAccess 和 OtherAccess 的含义可能略有不同。在 Linux 和 Android 上,可以使用抽象地址的套接字;对于此类套接字,套接字权限没有意义。
常量 | 值 | 描述 |
---|---|---|
QLocalServer::NoOptions | 0x0 | 没有设置访问限制。 |
QLocalServer::UserAccessOption | 0x01 | 访问限制为创建套接字的相同用户。 |
QLocalServer::GroupAccessOption | 0x2 | Linux 上,访问限制为创建套接字的相同组,但不是用户。在 Windows 上,访问限制为进程的主要组。 |
QLocalServer::OtherAccessOption | 0x4 | Linux 上,除创建套接字的用户和组外,对所有人都开放。在 Windows 上,对任何人都开放。 |
QLocalServer::WorldAccessOption | 0x7 | 无访问限制。 |
QLocalServer::AbstractNamespaceOption | 0x8 | 监听套接字将在抽象命名空间中创建。该标志特定于 Linux。在其他平台上,为了代码的可移植性,此标志等效于 WorldAccessOption。 |
SocketOptions 类型是 QFlags<SocketOption> 的typedef。它存储了 SocketOption 值的 OR 组合。
另请参阅 socketOptions。
属性文档
[bindable]
socketOptions : SocketOptions
注意:此属性支持 QProperty 绑定。
此属性包含控制套接字操作方式的套接字选项。
例如,套接字可以限制可访问套接字的用户 ID。
必须在调用 listen() 之前设置这些选项。
在某些情况下,例如在 Linux 的 Unix 域套接字中,套接字的访问将由文件系统权限确定,并且基于 umask 创建。设置访问标志将覆盖此设置,并将根据指定限制或允许访问。
其他基于 Unix 的操作系统,如 macOS,不尊重 Unix 域套接字的文件权限,并且默认具有“全球访问”权限,这些权限标志将没有影响。
在 Windows 上,UserAccessOption 足够允许非提升进程连接到由同一位用户运行的提升进程创建的本地服务器。GroupAccessOption 指的是进程的主组(请参阅 Windows 文档中的 TokenPrimaryGroup)。OtherAccessOption 指的是众所周知的“ Everyone”组。
在 Linux 平台上,可以在抽象命名空间中创建套接字,该命名空间独立于文件系统。使用这种类型的套接字意味着忽略权限选项。在其他平台上 AbstractNamespaceOption 等同于 WorldAccessOption。
默认情况下,未设置任何标志,访问权限是平台的默认设置。
另请参阅listen()。
成员函数文档
QLocalServer::[显式]
QLocalServer
(QObject
*] = nullptr)
使用指定的 ] 创建一个新的本地套接字服务器。
另请参阅listen()。
QLocalServer::[虚拟 noexcept]
~QLocalServer
()
销毁 QLocalServer 对象。如果服务器正在监听连接,则会自动关闭。
任何仍然连接的 QLocalSockets 客户端必须在服务器删除之前断开连接或被重新父化。
另请参阅close()。
void QLocalServer::close
()
停止监听传入连接。现有的连接不受影响,但任何新的连接都将被拒绝。
另请参阅isListening() 和 listen()。
QString QLocalServer::errorString
() const
返回适合由 serverError 报告的当前错误的文本消息。如果没有可用的合适字符串,则返回空字符串。
另请参阅serverError()。
QString QLocalServer::fullServerName
() const
返回服务器正在监听的完整路径。
注意:这是平台特定的
另请参阅listen() 和 serverName()。
[虚拟]
bool QLocalServer::hasPendingConnections
() const
如果服务器有一个待处理的连接,则返回 true
;否则返回 false
。
另请参阅nextPendingConnection() 和 setMaxPendingConnections()。
[虚拟保护]
void QLocalServer::incomingConnection(quintptr socketDescriptor)
当有新连接可用时,此虚拟函数将由 QLocalServer 调用。 socketDescriptor 是接受连接的原生套接字描述符。
基本实现创建一个 QLocalSocket,设置套接字描述符,然后在待处理连接的内部列表中存储 QLocalSocket。最后,发出 newConnection()。
重新实现此函数以更改服务器在连接可用时的行为。
另请参阅 newConnection(),nextPendingConnection(),以及 QLocalSocket::setSocketDescriptor()。
bool QLocalServer::isListening() const
如果服务器正在监听传入连接,则返回 true
,否则返回 false。
bool QLocalServer::listen(const QString &name)
告诉服务器监听 name 上的传入连接。如果服务器目前正在监听,则将返回 false。成功时返回 true,否则返回 false。
name 可以是一个单独的名称,QLocalServer 将确定正确的平台特定路径。 serverName() 将返回传递给 listen 的名称。
通常您只需传递一个类似于 "foo" 的名称,但在 Unix 中这也可以是路径,例如 "/tmp/foo",而在 Windows 中可以是管道路径,例如 "\\.\pipe\foo"。
注意: 在 Unix 中,如果服务器在没有关闭的情况下崩溃,listen 将会因 AddressInUseError 而失败。要创建新服务器,应删除该文件。在 Windows 中,两个本地服务器可以同时监听同一管道,但任何连接都将进入其中一个服务器。
另请参阅 serverName(),isListening(),和 close()。
bool QLocalServer::listen(qintptr socketDescriptor)
指示服务器在 socketDescriptor 上监听传入连接。如果服务器目前正在监听,则属性返回 false
。成功时返回 true
;否则返回 false
。套接字必须准备好接受新连接,且不调用额外的平台特定函数。该套接字被设置为非阻塞模式。
serverName(),fullServerName() 可能会返回一个带有名称的字符串,如果平台支持此选项;否则,它们返回一个空的 QString。特别是,如果 Linux 支持的抽象命名空间中的套接字地址包含不可打印字符,则不会返回有用的名称。
另请参阅 isListening() 和 close()。
[自 6.3 开始]
int QLocalServer::listenBacklogSize() const
返回待接受连接的队列大小。
此函数在 Qt 6.3 中引入。
另请参阅setListenBacklogSize。
int QLocalServer::maxPendingConnections() const
返回最大挂起的已接受连接数。默认为 30。
另请参阅setMaxPendingConnections 和 hasPendingConnections。
[信号]
void QLocalServer::newConnection()
每次有新的连接可用时都会发射此信号。
另请参阅hasPendingConnections 和 nextPendingConnection。
[虚拟]
QLocalSocket *QLocalServer::nextPendingConnection()
返回下一个挂起的连接,作为一个已连接的 QLocalSocket 对象。
套接字是在服务器的子集中创建的,这意味着当 QLocalServer 对象被销毁时,它会自动被删除。完成使用后仍然建议显式删除对象,以避免内存浪费。
如果没有挂起的连接,则此函数调用会返回 nullptr
。
另请参阅hasPendingConnections、newConnection 和 incomingConnection。
[静态]
bool QLocalServer::removeServer(const QString &name)
删除任何可能导致对 listen() 的调用失败的服务器实例,并且在成功时返回 true
;否则返回 false
。此函数旨在从崩溃中恢复,如果在之前的服务器实例尚未清理。
在 Windows 上,此函数不执行任何操作;在 Unix 上,它删除由 name 给定的套接字文件。
警告:请小心避免删除正在运行的实例的套接字。
QAbstractSocket::SocketError QLocalServer::serverError() const
返回最后一次发生的错误类型或 NoError。
另请参阅errorString。
QString QLocalServer::serverName() const
如果服务器正在监听连接,则返回服务器名称;否则返回 QString()。
另请参阅listen 和 fullServerName。
[自 6.3 开始]
void QLocalServer::setListenBacklogSize(int size)
将待接受连接的队列大小设置为 size。操作系统可能会减少或忽略此值。默认队列大小为 50。
注意:必须在调用 listen() 之前设置此属性。
此函数在 Qt 6.3 中引入。
另请参阅listenBacklogSize。
void QLocalServer::setMaxPendingConnections(int numConnections)
设置待接受连接的最大数量为 numConnections。在调用 nextPendingConnection() 之前,QLocalServer 将不会接受超过 numConnections 的传入连接。
注意:尽管在达到其最大待处理连接数量后,QLocalServer 将停止接受新的连接,但操作系统可能会将它们保留在队列中,导致客户端发出已连接的信号。
另请参阅maxPendingConnections() 和 hasPendingConnections。
qintptr QLocalServer::socketDescriptor() const
返回服务器用于监听传入指令的本地套接字描述符,如果服务器没有监听则返回 -1。
描述符的类型取决于平台
- 在 Windows 上,返回的值是一个 Winsock 2 Socket Handle。
- 在 INTEGRITY 上,返回的值是 QTcpServer 套接字描述符,其类型由 socketDescriptor 定义。
- 在其他所有类 UNIX 操作系统上,类型是一个表示监听套接字的文件描述符。
另请参阅listen()。
QLocalServer::SocketOptions QLocalServer::socketOptions() const
返回在套接字上设置的套接字选项。
注意:socketOptions 属性的获取函数。
另请参阅setSocketOptions。
bool QLocalServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
等待最多 msec 毫秒或直到有传入连接可用。如果可用连接返回 true
,否则返回 false
。如果操作超时且 timedOut 不是 nullptr
,则 *timedOut 会被设置为 true。
这是一个阻塞的函数调用。在单线程 GUI 应用程序中使用此函数并不明智,因为整个应用程序将在函数返回之前停止响应。waitForNewConnection() 主要在没有事件循环可用时有用。
非阻塞的替代方法是连接到 newConnection() 信号。
如果 msec 为 -1,该函数将不会超时。
© 2024 The Qt Company Ltd。此处包含的文档贡献为各自所有者的版权。此处提供的文档是根据 Free Software Foundation 发布的 GNU Free Documentation License version 1.3 条款许可的。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。