1

我正在使用 Qt 构建 Udp 和 Tcp 服务器/客户端。现在在最近的项目中,不允许使用 Qt,我应该使用 Boost。经历了 boost::asio 之后,我感到很困惑,因为有很多功能和用法与 Qt 非常不同。对于 Udp(多播、广播等),我现在或多或少地清楚了。但是对于 Tcp 我在理解上有问题:

(必须做所有异步)

  1. TCP 是面向流的,因此无法知道已到达的字节数。所以我们使用asio::ip::tcp::socket::async_read_some(). 然而,在 Qt 中,我们有readAll()一个套接字,它可以读取readyRead()信号上的所有数据并返回 a QByteArray,我们不需要指定它的大小,因为它可以增长。我如何在 Boost 中实现这一点?readyRead()我认为信号会大致映射到async_read_some(),其余的(readAll()和“可增长的” buffer/array?

  2. disconnected如果 TCP 连接断开(服务器/客户端关闭、局域网电缆拔出等),则在 Qt 中发出 () 信号。Boost 中的等效检查是什么?我需要一个计时器来定期发送和期待自己的心跳消息吗?

4

1 回答 1

1
  1. 使用一些具有适当完成条件的async_read 自由函数重载。如您所见,此函数接受asio::streambuf自动增长的 。

  2. 是的,唯一可移植且可靠的方法是发送一些心跳。我不知道 Qt 是怎么做到的,但是试着剪断网线,看看你是否收到来自 Qt 的任何通知......

于 2013-02-10T14:33:53.097 回答