一、描述
此类在 Windows 上这是一个命名管道,在 Unix 上这是一个本地域socket。(命名管道和本地域socket都用于进程间通信)
二、类型成员
1、QLocalSocket::LocalSocketError:此枚举表示可能发生的错误。最近的错误可通过调用error() 来检索。
- ConnectionRefusedError:连接被对等方拒绝(或超时)。
- PeerClosedError:远程socket关闭了连接。当前socket也将在发送远程关闭通知后关闭。
- ServerNotFoundError:未找到本地socket名称。
- SocketAccessError:socket操作失败,因为应用程序缺少所需的权限。
- SocketResourceError:本地系统资源不足(例如,socket过多)。
- SocketTimeoutError:socket操作超时。
- DatagramTooLargeError:数据报大于操作系统的限制(可以低至 8192 字节)。
- ConnectionError:连接发生错误。
- UnsupportedSocketOperationError:本地操作系统不支持请求的socket操作。
- OperationError:当socket处于不允许的状态时尝试进行操作。
- UnknownSocketError:发生不明错误。
2、QLocalSocket::LocalSocketState:此枚举描述了socket可以处于的不同状态。
- UnconnectedState:未连接
- ConnectingState:socket已开始建立连接。
- ConnectedState:已建立连接。
- ClosingState:socket即将关闭(数据可能仍在等待写入)。
三、成员函数
1、[signal] void connected()
在调用 connectToServer() 并成功建立连接后发出此信号。
2、[signal] void disconnected()
当socket已断开连接时发出此信号。
3、[signal] void errorOccurred(QLocalSocket::LocalSocketError socketError)
发生错误后发出此信号。 socketError 参数描述发生的错误类型。
QLocalSocket::LocalSocketError 不是注册的元类型,因此对于Qt::QueuedConnection信号槽连接类型,必须使用 Q_DECLARE_METATYPE() 和 qRegisterMetaType() 注册它。
4、[signal] void stateChanged(QLocalSocket::LocalSocketState socketState)
每当 QLocalSocket 的状态发生变化时,就会发出此信号。 socketState 参数是新状态。
QLocalSocket::SocketState 不是注册的元类型,因此对于排队连接,您必须使用 Q_DECLARE_METATYPE() 和 qRegisterMetaType() 注册它。
5、void abort()
中止当前连接并重置socket。 与 disconnectFromServer() 不同,此函数会立即关闭socket,清除写入缓冲区中的所有挂起数据。
6、void connectToServer(QIODevice::OpenMode openMode = ReadWrite)
尝试与 serverName() 建立连接。 在打开连接之前必须调用 setServerName()。
7、void connectToServer(const QString &name, QIODevice::OpenMode openMode = ReadWrite)
重载函数。
8、void disconnectFromServer()
尝试关闭socket。 如果有待写入的数据等待写入,QLocalSocket 将进入 ClosingState 并等待所有数据写入完毕。 最终,它将进入 UnconnectedState 并发出 disconnectedFromServer() 信号。
9、QLocalSocket::LocalSocketError error()
返回上次发生的错误类型。
10、bool flush()
此函数尽可能多地从内部写缓冲区写入socket,不阻塞。如果有任何数据被写入,函数返回true。
如果需要 QLocalSocket 立即开始发送缓冲数据,请调用此函数。成功写入的字节数取决于操作系统。在大多数情况下不需要调用此函数,因为一旦控制权返回到事件循环,QLocalSocket 将自动开始发送数据。 如果没有事件循环,应改为使用 waitForBytesWritten()。
11、QString fullServerName()
返回socket连接到的服务器路径。
12、bool isValid()
socket有效并且可以使用。注意:socket的状态必须是 ConnectedState 才能进行读写。
13、bool open(QIODevice::OpenMode openMode = ReadWrite)
重新实现:QIODevice::open(QIODevice::OpenMode)。相当于上面第6个函数。
14、QString serverName()
返回由 setServerName() 指定的对等方的名称。
15、void setReadBufferSize(qint64 size)
设置 QLocalSocket 的内部读取缓冲区的大小(字节)。
默认情况下,缓冲区大小为0意味着读取缓冲区是无限的,且所有传入的数据都将被缓冲。
16、void setServerName(const QString &name)
设置要连接的对等方的名称。 在 Windows 上,是命名管道的名称; 在 Unix 上是本地域socket的名称。该函数必须在socket未连接时调用。
17、bool waitForConnected(int msecs = 30000)
等待socket连接,最多 msecs 毫秒。 如果连接已经建立,这个函数返回true;否则返回false。 在返回false的情况下,可以调用error()来确定错误的原因。如果 msecs 为 -1,则此函数不会超时。
以下示例最多等待一秒钟以建立连接:
socket->connectToServer("market");
if (socket->waitForConnected(1000))
qDebug("Connected!");
18、bool waitForDisconnected(int msecs = 30000)
等待直到socket断开连接,最多 msecs 毫秒。 如果连接成功断开,此函数返回true;否则它返回 false(如果操作超时,如果发生错误,或者如果这个 QLocalSocket 已经断开连接)。在返回false的情况下,可以调用error()来确定错误的原因。如果 msecs 为 -1,则此函数不会超时。
以下示例最多等待一秒钟以关闭连接:
socket->disconnectFromServer();
if (socket->state() == QLocalSocket::UnconnectedState
|| socket->waitForDisconnected(1000)) {
qDebug("Disconnected!");
}
19、bool waitForReadyRead(int msecs = 30000)
此函数会阻塞,直到数据可供读取且 readyRead() (来自QIODevice的信号)信号已发出。 该函数将在 msecs 毫秒后超时; 默认超时为 30000 毫秒。如果数据可供读取,该函数返回true;否则返回 false(如果发生错误或操作超时)。