QLocalSocket 类提供本地套接字。 更多...
头: | #include <QLocalSocket> |
CMake: |
find_package(Qt6 COMPONENTS Network REQUIRED)
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 } |
enum | SocketOption { NoOptions, AbstractNamespaceOption } |
flags | SocketOptions |
QLocalSocket (QObject * parent = nullptr) | |
virtual | ~QLocalSocket () |
void | abort () |
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 | skipData (qint64 maxSize ) override |
virtual qint64 | writeData (const char * data , qint64 c ) override |
在 Windows 这是命名管道,在 Unix 这是本地域套接字。
若出现错误, error () 返回错误的类型,且 errorString () 可以被调用,以获得发生什么的人类可读描述。
尽管 QLocalSocket 是为用于事件循环而设计的,没有事件循环使用它是可能的。在此情况下,必须使用 waitForConnected (), waitForReadyRead (), waitForBytesWritten (),和 waitForDisconnected () 阻塞直到操作完成 (或超时到期)。
另请参阅 QLocalServer .
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
|
发生无法识别的错误。 |
此枚举描述套接字可以处于的不同状态。
常量 | 值 | 描述 |
---|---|---|
QLocalSocket::UnconnectedState
|
QAbstractSocket::UnconnectedState
|
套接字未连接。 |
QLocalSocket::ConnectingState
|
QAbstractSocket::ConnectingState
|
套接字开始建立连接。 |
QLocalSocket::ConnectedState
|
QAbstractSocket::ConnectedState
|
已建立连接。 |
QLocalSocket::ClosingState
|
QAbstractSocket::ClosingState
|
套接字即将关闭 (数据可能仍在等待被写入)。 |
另请参阅 QLocalSocket::state ().
[since 6.2]
enum QLocalSocket::
SocketOption
此枚举描述可以用于连接到服务器的可能选项。目前,在 Linux 和 Android,它用于指定连接绑定到抽象地址的套接字监听服务器。
常量 | 值 | 描述 |
---|---|---|
QLocalSocket::NoOptions
|
0x00
|
没有设置选项。 |
QLocalSocket::AbstractNamespaceOption
|
0x01
|
套接字将试着连接到抽象地址。此标志特定于 Linux 和 Android。在其它平台会被忽略。 |
This enum was introduced or modified in Qt 6.2.
SocketOptions 类型是 typedef 对于 QFlags <SocketOption>。它存储 SocketOption 值的 OR 组合。
另请参阅 socketOptions .
[bindable, since 6.2]
socketOptions
:
SocketOptions
注意: 此特性支持 QProperty 绑定。
此特性保持套接字选项。
选项必须有设置,当套接字在 UnconnectedState 状态。
该特性在 Qt 6.2 引入。
另请参阅 connectToServer ().
创建新的本地套接字。 parent 自变量会被传递给 QObject 的构造函数。
[signal]
void
QLocalSocket::
connected
()
此信号被发射在 connectToServer () 有被调用且连接已成功建立。
另请参阅 connectToServer () 和 disconnected ().
[signal]
void
QLocalSocket::
disconnected
()
此信号被发射当套接字断开连接时。
另请参阅 connectToServer (), disconnectFromServer (), abort (),和 connected ().
[signal, since 5.15]
void
QLocalSocket::
errorOccurred
(
QLocalSocket::LocalSocketError
socketError
)
此信号被发射在发生错误之后。 socketError 参数描述发生错误的类型。
QLocalSocket::LocalSocketError 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().
该函数在 Qt 5.15 引入。
另请参阅 error (), errorString (),和 创建自定义 Qt 类型 .
[signal]
void
QLocalSocket::
stateChanged
(
QLocalSocket::LocalSocketState
socketState
)
此信号被发射每当 QLocalSocket 的状态改变。 socketState 参数是新状态。
QLocalSocket::SocketState 不是注册 Metatype (元类型),因此,对于队列化连接而言,必须注册它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().
另请参阅 state () 和 创建自定义 Qt 类型 .
[virtual]
QLocalSocket::
~QLocalSocket
()
销毁套接字,关闭连接 (若有必要)。
中止当前连接并重置套接字。不像 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 ().
[since 5.1]
void
QLocalSocket::
connectToServer
(
QIODeviceBase::OpenMode
openMode
= ReadWrite)
试图连接到 serverName (). setServerName () 必须被调用在打开连接之前。另外,您可以使用 connectToServer(const QString &name, OpenMode openMode);
套接字被打开采用给定 openMode 并首先进入 ConnectingState 。若建立连接, QLocalSocket 进入 ConnectedState 并发射 connected ().
在调用此函数后,套接字可以发射 errorOccurred () 给 (发出错误的) 信号。
该函数在 Qt 5.1 引入。
另请参阅 state (), serverName (),和 waitForConnected ().
这是重载函数。
设置服务器 name 并试图与它建立连接。
套接字被打开采用给定 openMode 并首先进入 ConnectingState 。若建立连接, QLocalSocket 进入 ConnectedState 并发射 connected ().
在调用此函数后,套接字可以发射 errorOccurred () 给 (发出错误的) 信号。
另请参阅 state (), serverName (),和 waitForConnected ().
试图关闭套接字。若有等待写入的待决数据, QLocalSocket 将进入 ClosingState 并等待直到所有数据被写入。最终,它将进入 UnconnectedState 和发射 disconnected () 信号。
另请参阅 connectToServer ().
返回最后发生的错误类型。
另请参阅 state () 和 errorString ().
此函数尽可能将内部写入缓冲不阻塞地写入套接字。若有写入任何数据,此函数返回
true
;否则 false 被返回。
调用此函数若需要 QLocalSocket 立即开始发送缓冲数据。成功写入的字节数从属操作系统。在大多数情况下,不需调用此函数,因为 QLocalSocket 将开始自动发送数据,一旦控制回到事件循环。若缺乏事件循环,调用 waitForBytesWritten () 代替。
另请参阅 write () 和 waitForBytesWritten ().
返回套接字连接到的服务器路径。
注意: 此函数的返回值是特定于平台的。
另请参阅 connectToServer () 和 serverName ().
[override virtual]
bool
QLocalSocket::
isSequential
() const
重实现: QIODevice::isSequential () 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 () 了解更多细节。
返回内部读取缓冲尺寸。这限制客户端可以接收的数据量先于调用 read () 或 readAll ()。0 (默认) 读取缓冲尺寸意味着缓冲没有大小限制,确保数据不丢失。
另请参阅 setReadBufferSize () 和 read ().
[override virtual protected]
qint64
QLocalSocket::
readData
(
char
*
data
,
qint64
c
)
重实现: QIODevice::readData (char *data, qint64 maxSize).
返回对等方的名称作为指定通过 setServerName (),或空 QString if setServerName () 尚未被调用或 connectToServer () 失败。
另请参阅 setServerName (), connectToServer (),和 fullServerName ().
设置尺寸为 QLocalSocket 的内部读取缓冲到 size 字节。
若缓冲尺寸被限制到某个大小, QLocalSocket 不会缓冲超过此大小的数据。例外,0 缓冲尺寸意味着读取缓冲是无限的且缓冲所有传入数据。这是默认值。
此选项是有用的若仅在某时间点读取数据 (如:在实时流应用程序中),或者,若希望保护套接字以免接收太多数据 (可能最终导致应用程序内存不足)。
另请参阅 readBufferSize () 和 read ().
[since 5.1]
void
QLocalSocket::
setServerName
(const
QString
&
name
)
设置 name 为要连接的对等方。在 Windows 名称是命名管道的名称;在 Unix 名称是本地域套接字的名称。
此函数必须被调用,当套接字未被连接时。
该函数在 Qt 5.1 引入。
另请参阅 serverName ().
初始化
QLocalSocket
采用本机套接字描述符
socketDescriptor
。返回
true
if
socketDescriptor
被接受作为有效套接字描述符;否则返回
false
。以指定模式打开套接字通过
openMode
,并进入指定套接字状态通过
socketState
.
注意: 采用相同本机套接字描述符初始化 2 个本地套接字是不可能的。
另请参阅 socketDescriptor (), state (),和 openMode ().
[override virtual protected]
qint64
QLocalSocket::
skipData
(
qint64
maxSize
)
重实现: QIODevice::skipData (qint64 maxSize).
返回本地套接字描述符为 QLocalSocket 对象若这是可用的;否则返回 -1。
套接字描述符不可用当 QLocalSocket 是在 UnconnectedState 。描述符的类型取决于平台:
另请参阅 setSocketDescriptor ().
返回套接字的状态。
另请参阅 error ().
[override virtual]
bool
QLocalSocket::
waitForBytesWritten
(
int
msecs
= 30000)
重实现: QIODevice::waitForBytesWritten (int msecs).
等待直到套接字被连接,最长
msecs
毫秒。若连接已建立,此函数返回
true
;否则它返回
false
。若它返回
false
,可以调用
error
() 以确定错误的原因。
以下范例最多等待 1 秒为建立连接:
socket->connectToServer("market"); if (socket->waitForConnected(1000)) qDebug("Connected!");
若 msecs 是 -1,此函数不会超时。
另请参阅 connectToServer () 和 connected ().
等待直到套接字已断开连接,最长
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).