QLocalSocket Class
QLocalSocket 类提供了一个本地套接字。更多
Header: | #include <QLocalSocket> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
继承: | QIODevice |
公共类型
enum | LocalSocketError { ConnectionRefusedError, PeerClosedError, ServerNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError } |
enum | LocalSocketState { UnconnectedState, ConnectingState, ConnectedState, ClosingState } |
(since 6.2) enum | SocketOption { NoOptions, AbstractNamespaceOption } |
flags | SocketOptions |
属性
(since 6.2)
socketOptions : SocketOptions
公共函数
QLocalSocket(QObject *parent = nullptr) | |
virtual | ~QLocalSocket() |
void | abort() |
QBindable<QLocalSocket::SocketOptions> | bindableSocketOptions() |
void | connectToServer(QIODeviceBase::OpenMode openMode = ReadWrite) |
void | connectToServer(const QString &name, QIODeviceBase::OpenMode openMode = ReadWrite) |
void | disconnectFromServer() |
QLocalSocket::LocalSocketError | error() const |
bool | flush() |
QString | fullServerName() const |
bool | isValid() const |
qint64 | readBufferSize() const |
QString | serverName() const |
void | setReadBufferSize(qint64 size) |
void | setServerName(const QString &name) |
bool | setSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) |
void | setSocketOptions(QLocalSocket::SocketOptions option) |
qintptr | socketDescriptor() const |
QLocalSocket::SocketOptions | socketOptions() const |
QLocalSocket::LocalSocketState | state() const |
bool | waitForConnected(int msecs = 30000) |
bool | waitForDisconnected(int msecs = 30000) |
重新实现的公共函数
virtual qint64 | bytesAvailable() const override |
virtual qint64 | bytesToWrite() const override |
virtual bool | canReadLine() const override |
virtual void | close() override |
virtual bool | isSequential() const override |
virtual bool | open(QIODeviceBase::OpenMode openMode = ReadWrite) override |
virtual bool | waitForBytesWritten(int msecs = 30000) override |
virtual bool | waitForReadyRead(int msecs = 30000) override |
信号
void | connected() |
void | disconnected() |
void | errorOccurred(QLocalSocket::LocalSocketError socketError) |
void | stateChanged(QLocalSocket::LocalSocketState socketState) |
重新实现的受保护函数
virtual qint64 | readData(char *data, qint64 c) override |
virtual qint64 | readLineData(char *data, qint64 maxSize) override |
virtual qint64 | skipData(qint64 maxSize) override |
virtual qint64 | writeData(const char *data, qint64 c) override |
详细说明
在 Windows 环境下,这是一个命名管道;在 Unix 环境下,这是一个本地域套接字。
如果发生错误,error() 会返回错误类型,调用errorString() 可以获得关于发生错误的可读描述。
虽然 QLocalSocket 是为与事件循环一起使用而设计的,但也可以在没有事件循环的情况下使用。在这种情况下,您必须使用waitForConnected(),waitForReadyRead(),waitForBytesWritten() 和waitForDisconnected() 来阻塞,直到操作完成或超时。
另请参阅 QLocalServer 。
成员类型文档
enum QLocalSocket::LocalSocketError
LocalServerError 枚举表示可能发生的错误。可以通过调用QLocalSocket::error() 获取最近的错误信息。
常量 | 值 | 说明 |
---|---|---|
QLocalSocket::ConnectionRefusedError | QAbstractSocket::ConnectionRefusedError | 连接被对方拒绝(或超时)。 |
QLocalSocket::PeerClosedError | QAbstractSocket::RemoteHostClosedError | 远程套接字关闭了连接。请注意,客户端套接字(即本套接字)将在远程关闭通知发出后关闭。 |
QLocalSocket::ServerNotFoundError | QAbstractSocket::HostNotFoundError | 未找到本地套接字名称。 |
QLocalSocket::SocketAccessError | QAbstractSocket::SocketAccessError | 由于应用程序缺乏所需的权限,套接字操作失败。 |
QLocalSocket::SocketResourceError | QAbstractSocket::SocketResourceError | 本地系统资源耗尽(如套接字过多)。 |
QLocalSocket::SocketTimeoutError | QAbstractSocket::SocketTimeoutError | 套接字操作超时。 |
QLocalSocket::DatagramTooLargeError | QAbstractSocket::DatagramTooLargeError | 数据报大于操作系统的限制(可低至 8192 字节)。 |
QLocalSocket::ConnectionError | QAbstractSocket::NetworkError | 连接发生错误。 |
QLocalSocket::UnsupportedSocketOperationError | QAbstractSocket::UnsupportedSocketOperationError | 本地操作系统不支持请求的套接字操作。 |
QLocalSocket::OperationError | QAbstractSocket::OperationError | 当套接字处于不允许操作的状态时尝试了操作。 |
QLocalSocket::UnknownSocketError | QAbstractSocket::UnknownSocketError | 出现不明错误。 |
enum QLocalSocket::LocalSocketState
该枚举描述了套接字可能处于的不同状态。
常量 | 值 | 描述 |
---|---|---|
QLocalSocket::UnconnectedState | QAbstractSocket::UnconnectedState | 套接字未连接。 |
QLocalSocket::ConnectingState | QAbstractSocket::ConnectingState | 套接字已开始建立连接。 |
QLocalSocket::ConnectedState | QAbstractSocket::ConnectedState | 连接已建立。 |
QLocalSocket::ClosingState | QAbstractSocket::ClosingState | 套接字即将关闭(数据可能仍在等待写入)。 |
另请参阅 QLocalSocket::state().
[since 6.2]
枚举 QLocalSocket::SocketOption
flags QLocalSocket::SocketOptions
该枚举描述了用于连接服务器的可能选项。目前,在 Linux 和 Android 上,它用于指定连接到监听绑定到抽象地址的套接字的服务器。
常量 | 值 | 说明 |
---|---|---|
QLocalSocket::NoOptions | 0x00 | 未设置任何选项。 |
QLocalSocket::AbstractNamespaceOption | 0x01 | 套接字将尝试连接到抽象地址。此标记仅适用于 Linux 和 Android。在其他平台上将被忽略。 |
此枚举在 Qt 6.2 中引入。
SocketOptions 类型是QFlags<SocketOption> 的类型定义。它存储 SocketOption 值的 OR 组合。
另请参阅 socketOptions 。
属性文档
[bindable, since 6.2]
socketOptions : SocketOptions
注意: 该属性支持QProperty 绑定。
该属性包含套接字选项。
选项必须在套接字处于UnconnectedState 状态时设置。
此属性在 Qt 6.2 中引入。
另请参阅 connectToServer().
成员函数文档
QLocalSocket::QLocalSocket(QObject *parent = nullptr)
创建新的本地套接字。parent 参数传递给QObject 的构造函数。
[virtual noexcept]
QLocalSocket::~QLocalSocket()
销毁套接字,必要时关闭连接。
void QLocalSocket::abort()
终止当前连接并重置套接字。与disconnectFromServer() 不同,该函数会立即关闭套接字,并清除写缓冲区中的任何待处理数据。
另请参阅 disconnectFromServer() 和close()。
[override virtual]
qint64 QLocalSocket::bytesAvailable() const
重实现:QIODevice::bytesAvailable() const.
[override virtual]
qint64 QLocalSocket::bytesToWrite() const
重实现:QIODevice::bytesToWrite() const.
[override virtual]
bool QLocalSocket::canReadLine() const
重实现:QIODevice::canReadLine() const.
[override virtual]
void QLocalSocket::close()
重新实现:QIODevice::close().
关闭套接字的 I/O 设备,并调用disconnectFromServer() 关闭套接字连接。
有关关闭 I/O 设备时的操作说明,请参阅QIODevice::close()。
另请参阅 abort()。
void QLocalSocket::connectToServer(QIODeviceBase::OpenMode openMode = ReadWrite)
尝试与serverName() 建立连接。setServerName() 必须在打开连接之前调用。或者也可以使用 connectToServer(constQString &name, OpenMode openMode);
套接字在给定的openMode 中打开,首先进入ConnectingState 。如果建立了连接,QLocalSocket 进入ConnectedState 并发出connected() 。
调用此函数后,套接字会发出errorOccurred() 信号,表明发生了错误。
另请参阅 state()、serverName() 和waitForConnected()。
void QLocalSocket::connectToServer(const QString &name, QIODeviceBase::OpenMode openMode = ReadWrite)
这是一个重载函数。
设置服务器name 并尝试与其建立连接。
套接字在给定的openMode 中打开,首先进入ConnectingState 。如果建立了连接,QLocalSocket 进入ConnectedState 并发出connected() 。
调用此函数后,套接字会发出errorOccurred() 信号,表明发生了错误。
另请参阅 state()、serverName() 和waitForConnected()。
[signal]
void QLocalSocket::connected()
该信号在调用connectToServer() 并成功建立连接后发出。
另请参阅 connectToServer() 和disconnected()。
void QLocalSocket::disconnectFromServer()
尝试关闭套接字。如果有等待写入的数据,QLocalSocket 将进入ClosingState ,等待所有数据写入。最后,它将进入UnconnectedState 并发出disconnected() 信号。
另请参阅 connectToServer()。
[signal]
void QLocalSocket::disconnected()
该信号在套接字断开连接时发出。
另请参阅 connectToServer()、disconnectFromServer()、abort() 和connected()。
QLocalSocket::LocalSocketError QLocalSocket::error() const
返回上次发生的错误类型。
另请参阅 state() 和errorString()。
[signal]
void QLocalSocket::errorOccurred(QLocalSocket::LocalSocketError socketError)
该信号在发生错误后发出。socketError 参数描述了发生错误的类型。
QLocalSocket::LocalSocketError 不是已注册的元类型,因此对于队列连接,必须使用 () 和 () 注册。Q_DECLARE_METATYPE qRegisterMetaType
另请参阅 error(),errorString() 和创建自定义 Qt 类型。
bool QLocalSocket::flush()
该函数将内部写缓冲区中的数据尽可能多地写入套接字,而不会阻塞。如果有数据写入,则返回true
;否则返回 false。
如果需要QLocalSocket 立即开始发送缓冲数据,请调用此函数。成功写入的字节数取决于操作系统。在大多数情况下,您不需要调用此函数,因为一旦控制权返回到事件循环,QLocalSocket 就会自动开始发送数据。如果没有事件循环,请调用waitForBytesWritten() 代替。
另请参阅 write() 和waitForBytesWritten()。
QString QLocalSocket::fullServerName() const
返回套接字所连接的服务器路径。
注意: 该函数的返回值与平台有关。
另请参阅 connectToServer() 和serverName()。
[override virtual]
bool QLocalSocket::isSequential() const
重实现:QIODevice::isSequential() const.
bool QLocalSocket::isValid() const
如果套接字有效并可使用,则返回true
;否则返回false
。
注意: 在进行读写操作之前,套接字的状态必须是ConnectedState 。
另请参阅 state() 和connectToServer()。
[override virtual]
bool QLocalSocket::open(QIODeviceBase::OpenMode openMode = ReadWrite)
重实现:QIODevice::open(QIODeviceBase::OpenMode 模式)。
等价于connectToServer (OpenMode 模式)。套接字以给定的openMode 打开,连接到由setServerName() 定义的服务器。
请注意,与大多数其他QIODevice 子类不同,open() 可能无法直接打开设备。如果套接字已连接或未定义要连接的服务器,函数将返回 false,否则返回 true。一旦设备真正打开(或连接失败),将发出connected() 或errorOccurred() 信号。
详情请参见connectToServer() 。
qint64 QLocalSocket::readBufferSize() const
返回内部读取缓冲区的大小。这限制了客户端在调用read() 或readAll() 之前可以接收的数据量。读取缓冲区大小为 0(默认值)意味着缓冲区没有大小限制,确保不会丢失数据。
另请参阅 setReadBufferSize() 和read()。
[override virtual protected]
qint64 QLocalSocket::readData(char *data, qint64 c)
重实现:QIODevice::readData(char *data, qint64 maxSize)。
[override virtual protected]
qint64 QLocalSocket::readLineData(char *data, qint64 maxSize)
重实现:QIODevice::readLineData(char *data, qint64 maxSize)。
QString QLocalSocket::serverName() const
返回setServerName() 指定的对等程序名称,如果setServerName() 未被调用或connectToServer() 失败,则返回空QString 。
另请参阅 setServerName()、connectToServer() 和fullServerName()。
void QLocalSocket::setReadBufferSize(qint64 size)
设置QLocalSocket 的内部读取缓冲区大小为size 字节。
如果缓冲区大小限制为某一特定大小,则QLocalSocket 不会缓冲超过此大小的数据。例外情况下,缓冲区大小为 0 意味着读取缓冲区不受限制,所有传入数据都会被缓冲。这是默认值。
如果只在特定时间点读取数据(如在实时流应用程序中),或者想保护套接字不接收过多数据,以免最终导致应用程序内存不足,那么这个选项就很有用。
另请参阅 readBufferSize() 和read()。
void QLocalSocket::setServerName(const QString &name)
设置要连接的对等设备的name 。在 Windows 下,name 是命名管道的名称;在 Unix 下,name 是本地域套接字的名称。
该函数必须在套接字未连接时调用。
另请参阅 serverName()。
bool QLocalSocket::setSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
使用本地套接字描述符socketDescriptor 初始化QLocalSocket 。如果socketDescriptor 被接受为有效的套接字描述符,则返回true
;否则返回false
。套接字以openMode 指定的模式打开,并进入socketState 指定的套接字状态。
注意: 不可能用同一个本地套接字描述符初始化两个本地套接字。
另请参阅 socketDescriptor()、state() 和openMode()。
[override virtual protected]
qint64 QLocalSocket::skipData(qint64 maxSize)
重实现:QIODevice::skipData(qint64 maxSize)。
qintptr QLocalSocket::socketDescriptor() const
如果QLocalSocket 对象的本地套接字描述符可用,则返回该描述符;否则返回-1。
当QLocalSocket 位于UnconnectedState 时,套接字描述符不可用。描述符的类型取决于平台:
- 在 Windows 平台上,返回值是Winsock 2 Socket Handle。
- 在 INTEGRITY 平台上,返回值是QTcpSocket 套接字描述符,类型由socketDescriptor 定义。
- 在所有其他类 UNIX 操作系统上,类型是代表套接字的文件描述符。
另请参阅 setSocketDescriptor() 。
QLocalSocket::LocalSocketState QLocalSocket::state() const
返回套接字的状态。
另请参见 error()。
[signal]
void QLocalSocket::stateChanged(QLocalSocket::LocalSocketState socketState)
每当QLocalSocket 的状态发生变化时,就会发出该信号。socketState 参数是新状态。
QLocalSocket::SocketState 不是已注册的元类型,因此对于队列连接,您必须使用Q_DECLARE_METATYPE() 和qRegisterMetaType() 注册它。
另请参阅 state() 和《创建自定义 Qt 类型》。
[override virtual]
bool QLocalSocket::waitForBytesWritten(int msecs = 30000)
重实现:QIODevice::waitForBytesWritten(int msecs)。
bool QLocalSocket::waitForConnected(int msecs = 30000)
等待套接字连接成功,最长等待时间为msecs 毫秒。如果连接已建立,则返回true
;否则返回false
。在返回false
的情况下,可以调用error() 来确定错误原因。
下面的示例等待连接建立的时间最长为一秒钟:
socket->connectToServer("market");if(socket->waitForConnected(1000)) qDebug("Connected!");
如果msecs 为-1,则该函数不会超时。
另请参阅 connectToServer() 和connected()。
bool QLocalSocket::waitForDisconnected(int msecs = 30000)
等待套接字断开连接,最长等待时间为msecs 毫秒。如果连接成功断开,则返回true
;否则返回false
(如果操作超时、发生错误或QLocalSocket 已断开)。在返回false
的情况下,可以调用error() 来确定错误原因。
下面的示例等待连接关闭的时间最长为一秒钟:
socket->disconnectFromServer();if(socket->state()==QLocalSocket::UnconnectedState|| socket->waitForDisconnected(1000)) { qDebug("Disconnected!"); }
如果msecs 为-1,则此函数不会超时。
另请参阅 disconnectFromServer() 和close() 。
[override virtual]
bool QLocalSocket::waitForReadyRead(int msecs = 30000)
重实现:QIODevice::waitForReadyRead(int msecs)。
该函数会阻塞,直到数据可供读取且readyRead() 信号已发出。函数将在msecs 毫秒后超时;默认超时为 30000 毫秒。
如果数据可供读取,函数将返回true
;否则将返回false
(如果发生错误或操作超时)。
另请参阅 waitForBytesWritten()。
[override virtual protected]
qint64 QLocalSocket::writeData(const char *data, qint64 c)
重实现:QIODevice::writeData(const char *data, qint64 maxSize)。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.