我正在使用 Qt 构建 Udp 和 Tcp 服务器/客户端。现在在最近的项目中,不允许使用 Qt,我应该使用 Boost。经历了 boost::asio 之后,我感到很困惑,因为有很多功能和用法与 Qt 非常不同。对于 Udp(多播、广播等),我现在或多或少地清楚了。但是对于 Tcp 我在理解上有问题:
(必须做所有异步)
TCP 是面向流的,因此无法知道已到达的字节数。所以我们使用
asio::ip::tcp::socket::async_read_some()
. 然而,在 Qt 中,我们有readAll()
一个套接字,它可以读取readyRead()
信号上的所有数据并返回 aQByteArray
,我们不需要指定它的大小,因为它可以增长。我如何在 Boost 中实现这一点?readyRead()
我认为信号会大致映射到async_read_some()
,其余的(readAll()
和“可增长的”buffer
/array?disconnected
如果 TCP 连接断开(服务器/客户端关闭、局域网电缆拔出等),则在 Qt 中发出 () 信号。Boost 中的等效检查是什么?我需要一个计时器来定期发送和期待自己的心跳消息吗?