【问题标题】:Qt, tcp/ip communication checksumQt、tcp/ip通信校验和
【发布时间】:2015-02-27 03:35:39
【问题描述】:

我正在编写一个数据显示程序,通过串行端口接收数据。监听器是别人写的,比较复杂。现在我需要将接收到的数据传输到另一个程序/PC。所以我正在考虑来自 Qt 的标准 tcp 通信。 tcp 类中是否有任何类可以像校验和一样工作? 如果我每次都以高频率传输 10 个双精度数组。我如何编写一个正确接收所有数据的客户端,而不编写那些复杂的算法来检查接收到的数据字节的有效性?

【问题讨论】:

  • TCP/IP 中内置了完整性检查。 TCP 保证数据(如果被接收)是完整且有序的。
  • 所以我每次只读10个双打?但这是否意味着一旦数据以某种方式转移(例如,如果套接字中还有一些数据),我将永远无法再正确了吗?
  • 我不确定我是否完全掌握了困难的本质。你是什​​么意思“转移”?转移方式、地点和人员?
  • AFAIK,tcp 将数据流切成数据包?那么,我只是连续接收所有数据包并每 8*10 字节(10 双)解码一次?我是套接字编程的新手,仍然对教科书的说法感到困惑......

标签: c++ qt sockets tcp


【解决方案1】:

TCP/IP 将这些检查作为协议本身的一部分。这包括对数据完整性的保证,以及对数据的正确重组(即它肯定会以相同的顺序排列)。您提到 TCP 将数据流切成数据包;这是真的,但它会在接收端以正确的顺序重新组装数据包,或者在需要时请求重新传输。所有这些都由 Qt 网络类负责。

【讨论】:

  • 那么,通过 tcp 套接字接收到的每 10 个双精度数据总是读取一次是安全的吗?
  • 是的,但您不能假设这些值会一次全部收到。有关如何处理此类事情的示例,我建议查看 Qt Fortune Server 示例qt-project.org/doc/qt-4.8/network-fortuneserver.html。在示例中,它显示了如何接收文本,但您可以轻松地将其更改为 QByteArray 或类似的东西。
猜你喜欢
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 2015-01-02
相关资源
最近更新 更多