QLocalSocket 类

QLocalSocket 类提供本地套接字。 更多...

头: #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 }
(从 6.2 起) enum SocketOption { NoOptions, AbstractNamespaceOption }
flags 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] enum QLocalSocket:: SocketOption
flags QLocalSocket:: SocketOptions

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

常量 描述
QLocalSocket::NoOptions 0x00 没有设置选项。
QLocalSocket::AbstractNamespaceOption 0x01 套接字将试着连接到抽象地址。此标志特定于 Linux 和 Android。在其它平台会被忽略。

该枚举在 Qt 6.2 引入。

SocketOptions 类型是 typedef 对于 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 () 以关闭套接字连接。

QIODevice::close () 了解当关闭 I/O 设备时出现动作的描述。

另请参阅 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 ().

[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 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 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 mode).

相当于 connectToServer (OpenMode mode)。套接字被打开采用给定 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 (),或空 QString if setServerName () 尚未被调用或 connectToServer () 失败。

另请参阅 setServerName (), connectToServer (),和 fullServerName ().

void QLocalSocket:: setReadBufferSize ( qint64 size )

设置尺寸为 QLocalSocket 的内部读取缓冲到 size 字节。

若缓冲尺寸被限制到某个大小, QLocalSocket 不会缓冲超过此大小的数据。例外,0 缓冲尺寸意味着读取缓冲是无限的且缓冲所有传入数据。这是默认值。

此选项是有用的若仅在某时间点读取数据 (如:在实时流应用程序中),或者,若希望保护套接字以免接收太多数据 (可能最终导致应用程序内存不足)。

另请参阅 readBufferSize () 和 read ().

void QLocalSocket:: setServerName (const QString & name )

设置 name 为要连接的对等方。在 Windows 名称是命名管道的名称;在 Unix 名称是本地域套接字的名称。

此函数必须被调用,当套接字未被连接时。

另请参阅 serverName ().

bool QLocalSocket:: setSocketDescriptor ( qintptr socketDescriptor , QLocalSocket::LocalSocketState socketState = ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)

初始化 QLocalSocket 采用本机套接字描述符 socketDescriptor 。返回 true if socketDescriptor 被接受作为有效套接字描述符;否则返回 false 。以指定模式打开套接字通过 openMode ,并进入指定套接字状态通过 socketState .

注意: 采用相同本机套接字描述符初始化 2 个本地套接字是不可能的。

另请参阅 socketDescriptor (), state (),和 openMode ().

[override virtual protected] qint64 QLocalSocket:: skipData ( qint64 maxSize )

重实现: QIODevice::skipData (qint64 maxSize).

qintptr QLocalSocket:: socketDescriptor () const

返回本地套接字描述符为 QLocalSocket 对象若这是可用的;否则返回 -1。

套接字描述符不可用当 QLocalSocket 是在 UnconnectedState 。描述符的类型取决于平台:

另请参阅 setSocketDescriptor ().

QLocalSocket::LocalSocketState QLocalSocket:: state () const

返回套接字的状态。

另请参阅 error ().

[signal] void QLocalSocket:: stateChanged ( QLocalSocket::LocalSocketState socketState )

此信号发射每当 QLocalSocket 的状态改变。 socketState 参数是新状态。

QLocalSocket::SocketState 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 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 () 以确定错误的原因。

以下范例最多等待 1 秒为建立连接:

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 () 以确定错误的原因。

以下范例最多等待 1 秒为关闭连接:

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).