Qt网络编程:QLocalSocket

一、描述

此类在 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(如果发生错误或操作超时)。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值