QLocalSocket 类

QLocalSocket 类提供了本地套接字功能。 了解更多...

头文件 #include <QLocalSocket>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network
继承自 QIODevice

公共类型

枚举LocalSocketError { ConnectionRefusedError, PeerClosedError, ServerNotFoundError, SocketAccessError, SocketResourceError, …, UnknownSocketError }
枚举LocalSocketState { UnconnectedState, ConnectingState, ConnectedState, ClosingState }
(since 6.2) 枚举SocketOption { NoOptions, AbstractNamespaceOption }
标志SocketOptions

属性

公共函数

QLocalSocket(QObject *parent = nullptr)
虚拟~QLocalSocket()
voidabort()
QBindable<QLocalSocket::SocketOptions>bindableSocketOptions()
voidconnectToServer(QIODeviceBase::OpenMode openMode = ReadWrite)
voidconnectToServer(const QString &name, QIODeviceBase::OpenMode openMode = ReadWrite)
voiddisconnectFromServer()
QLocalSocket::LocalSocketErrorerror() const
boolflush()
QStringfullServerName() const
boolisValid() const
qint64readBufferSize() const
QStringserverName() const
voidsetReadBufferSize(qint64 size)
voidsetServerName(const QString &name)
boolsetSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
voidsetSocketOptions(QLocalSocket::SocketOptions option)
qintptrsocketDescriptor() const
QLocalSocket::SocketOptionssocketOptions() const
QLocalSocket::LocalSocketStatestate() const
boolwaitForConnected(int msecs = 30000)
boolwaitForDisconnected(int msecs = 30000)

重实现的公共函数

virtual qint64bytesAvailable() const override
virtual qint64bytesToWrite() const override
virtual boolcanReadLine() const override
virtual voidclose() override
virtual boolisSequential() const override
virtual boolopen(QIODeviceBase::OpenMode openMode = ReadWrite) override
virtual boolwaitForBytesWritten(int msecs = 30000) override
virtual boolwaitForReadyRead(int msecs = 30000) override

信号

voidconnected()
voiddisconnected()
voiderrorOccurred(QLocalSocket::LocalSocketError socketError)
voidstateChanged(QLocalSocket::LocalSocketState socketState)

重实现的保护函数

virtual qint64readData(char *data, qint64 c) override
virtual qint64readLineData(char *data, qint64 maxSize) override
virtual qint64skipData(qint64 maxSize) override
virtual qint64writeData(const char *data, qint64 c) override

详细描述

在 Windows 上这是一个命名管道,而在 Unix 上这是一个本地域套接字。

如果发生错误,error() 返回错误类型,并且可以通过调用 errorString() 获取发生情况的描述文本。

虽然 QLocalSocket 设计与事件循环配合使用,但在没有事件循环的情况下也可以使用。在这种情况下,您必须使用 waitForConnected(),waitForReadyRead(),waitForBytesWritten() 和 waitForDisconnected(),这将阻塞,直到操作完成或超时。

另请参阅QLocalServer

成员类型文档

enum QLocalSocket::LocalSocketError

LocalServerError 枚举表示可能发生的错误。最新错误可以通过调用 QLocalSocket::error() 来检索。

常量描述
QLocalSocket::ConnectionRefusedErrorQAbstractSocket::ConnectionRefusedError对等方拒绝了连接(或超时)。
QLocalSocket::PeerClosedErrorQAbstractSocket::RemoteHostClosedError远程套接字关闭了连接。请注意,在发送远程关闭通知后,客户端套接字(即此套接字)将被关闭。
QLocalSocket::ServerNotFoundErrorQAbstractSocket::HostNotFoundError未找到本地套接字名称。
QLocalSocket::SocketAccessErrorQAbstractSocket::SocketAccessError套接字操作失败,因为应用程序缺少所需的权限。
QLocalSocket::SocketResourceErrorQAbstractSocket::SocketResourceError本地系统耗尽了资源(例如,套接字过多)。
QLocalSocket::SocketTimeoutErrorQAbstractSocket::SocketTimeoutError套接字操作超时。
QLocalSocket::DatagramTooLargeErrorQAbstractSocket::DatagramTooLargeError数据报比操作系统的限制大(可能低至 8192 字节)。
QLocalSocket::ConnectionErrorQAbstractSocket::NetworkError连接发生错误。
QLocalSocket::UnsupportedSocketOperationErrorQAbstractSocket::UnsupportedSocketOperationError请求的套接字操作不受本地操作系统支持。
QLocalSocket::OperationErrorQAbstractSocket::OperationError在进行操作时,套接字处于不允许该操作的的状态。
QLocalSocket::UnknownSocketErrorQAbstractSocket::UnknownSocketError发生了一个未识别的错误。

enum QLocalSocket::LocalSocketState

此枚举描述了套接字可以存在的不同状态。

常量描述
QLocalSocket::UnconnectedStateQAbstractSocket::UnconnectedState套接字未连接。
QLocalSocket::ConnectingStateQAbstractSocket::ConnectingState套接字已开始建立连接。
QLocalSocket::ConnectedStateQAbstractSocket::ConnectedState连接已建立。
QLocalSocket::ClosingStateQAbstractSocket::ClosingState套接字即将关闭(可能仍有数据等待写入)。

请参阅QLocalSocket::state(从6.2起)。

[since 6.2] enum QLocalSocket::SocketOption
flags QLocalSocket::SocketOptions

此枚举描述了可用于连接到服务器的可能选项。目前,在Linux和Android上,它用于指定连接到绑定到抽象地址的套接字的服务器。

常量描述
QLocalSocket::NoOptions0x00未设置任何选项。
QLocalSocket::AbstractNamespaceOption0x01套接字将尝试连接到抽象地址。此标志针对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

另请参阅setServerNameconnectToServerfullServerName

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公司有限公司的商标。所有其他商标均为其各自所有者的财产。