QLocalSocket 类
QLocalSocket 类提供了本地套接字功能。 了解更多...
头文件 | #include <QLocalSocket> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
继承自 | QIODevice |
公共类型
枚举 | LocalSocketError { ConnectionRefusedError, PeerClosedError, ServerNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError } |
枚举 | LocalSocketState { UnconnectedState, ConnectingState, ConnectedState, ClosingState } |
(since 6.2) 枚举 | SocketOption { NoOptions, AbstractNamespaceOption } |
标志 | SocketOptions |
属性
(since 6.2)
socketOptions : SocketOptions
公共函数
QLocalSocket(QObject *parent = nullptr) | |
虚拟 | ~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(从6.2起)。
[since 6.2]
enum QLocalSocket::SocketOption
flags QLocalSocket::SocketOptions
此枚举描述了可用于连接到服务器的可能选项。目前,在Linux和Android上,它用于指定连接到绑定到抽象地址的套接字的服务器。
常量 | 值 | 描述 |
---|---|---|
QLocalSocket::NoOptions | 0x00 | 未设置任何选项。 |
QLocalSocket::AbstractNamespaceOption | 0x01 | 套接字将尝试连接到抽象地址。此标志针对Linux和Android特有。在其他平台上被忽略。 |
此枚举是从Qt 6.2中引入的。
SocketOptions类型是SocketOption的typedef,它是一个QFlags<SocketOption>。它存储SocketOption值的OR组合。
请参阅socketOptions(从6.2起)。
属性文档
[bindable, since 6.2]
socketOptions : SocketOptions
注意:此属性支持QProperty绑定。
此属性包含套接字选项。
必须在套接字处于UnconnectedState状态时设置选项。
此属性是从Qt 6.2中引入的。
请参阅connectToServer(从6.2起)。
成员函数文档
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。
[覆盖虚函数]
bool QLocalSocket::canReadLine() const
重实现:[参见](qiodevice.html#canReadLine "QIODevice::canReadLine() const").
[覆盖虚函数]
void QLocalSocket::close()
重实现:[参见](qiodevice.html#close "QIODevice::close").
关闭套接字I/O设备并调用 disconnectFromServer() 来关闭套接字的连接。
有关关闭I/O设备时发生的操作描述,请参见 [参见](qiodevice.html#close "QIODevice::close").
另请参阅abort().
void QLocalSocket::connectToServer(QIODeviceBase::OpenMode openMode = ReadWrite)
尝试与 serverName() 连接。在打开连接之前必须调用 setServerName()。或者,您可以使用 connectToServer(const QString &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().
[信号]
void QLocalSocket::connected()
在调用 connectToServer() 并成功建立连接后,该信号被触发。
另请参阅connectToServer() 和 disconnected().
void QLocalSocket::disconnectFromServer()
尝试关闭套接字。如果有待写入的数据,QLocalSocket 将进入 ClosingState 并等待所有数据被写入。最终,它将进入 UnconnectedState 并触发 disconnected() 信号。
请参阅connectToServer(从6.2起)。
[信号]
void QLocalSocket::disconnected()
当套接字断开连接时,该信号被触发。
另请参阅connectToServer()), disconnectFromServer()), abort() 和 connected().
QLocalSocket::LocalSocketError QLocalSocket::error() const
返回最后发生错误的类型。
另请参阅state() 和 errorString().
[信号]
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。
[覆盖虚函数]
bool QLocalSocket::isSequential() const
重新实现: QIODevice::isSequential() const.
bool QLocalSocket::isValid() const
如果套接字是有效的并且可以正常使用,则返回true
;否则返回false
。
注意:在读取和写入之前,套接字的状态必须为ConnectedState。
另请参阅state()和connectToServer。
[覆盖虚函数]
bool QLocalSocket::open(QIODeviceBase::OpenMode openMode = ReadWrite)
重新实现:QIODevice::open(QIODeviceBase::OpenMode mode).
相当于connectToServer(OpenMode mode)。套接字使用给定的openMode打开到由setServerName定义的服务器。
请注意,与其他大多数QIODevice子类不同,open()函数可能不会直接打开设备。如果套接字已经连接或要连接的服务器未定义,则函数返回false;在所有其他情况下返回true。设备实际打开(或连接失败)时将发出connected()或errorOccurred()信号。
有关详细信息,请参阅connectToServer()。
qint64 QLocalSocket::readBufferSize() const
返回内部读缓冲区的大小。这限制了在调用read()或readAll()之前客户端可以接收的数据量。读缓冲区大小为0(默认值)表示缓冲区没有大小限制,确保不会丢失数据。
另请参阅setReadBufferSize()和read()。
[覆盖虚拟受保护]
qint64 QLocalSocket::readData(char *data, qint64 c)
重新实现:QIODevice::readData(char *data, qint64 maxSize)。
[覆盖虚拟受保护]
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()。
[覆盖虚拟保护]
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()。
[信号]
void QLocalSocket::stateChanged(QLocalSocket::LocalSocketState socketState)
当 QLocalSocket 的状态更改时,发出此信号。参数 socketState 是新状态。
QLocalSocket::SocketState 不是一个已注册的元类型,所以对于排队连接,您必须使用 Q_DECLARE_METATYPE() 和 qRegisterMetaType() 进行注册。
另请参阅state() 和 创建自定义 Qt 类型。
[覆盖虚拟]
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。
[覆盖虚拟]
bool QLocalSocket::waitForReadyRead(int msecs = 30000)
重新实现: QIODevice::waitForReadyRead(int msecs).
此函数阻塞,直到可读取数据并已发出readyRead()信号。该函数将在msecs毫秒后超时;默认超时时间为30000毫秒。
如果可以读取数据,则函数返回true
;否则返回false
(如果发生错误或操作超时)。
另请参阅waitForBytesWritten。
[覆盖虚拟受保护]
qint64 QLocalSocket::writeData(const char *data, qint64 c)
重新实现: QIODevice::writeData(const char *data, qint64 maxSize).
© 2024 Qt公司有限公司。本文档中的文档贡献是该文档各自的版权所有者的版权。本文档提供的文档按GNU自由文档许可第1.3版的条款发布,由自由软件基金会发布。Qt和相应的标志是芬兰以及/或其他国家/地区的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。