0

我正在用 C++ 编写一个程序,它将 1500 字节的数据从机器 A 发送到机器 B。

假设如下:

char* tx_data = (char*)operator new(1500)
for (int i = 0; i < 1500; i++) {
  tx_data[i] = (char)((int) 65); // ASCII 65 = A;
}
send_tx_data();

所以我们有 1500 次字母“A”来填充这个缓冲区(tx_data)。接收主机抓取传入的数据并将其转储到缓冲区(rx_data)中,并抓取接收到的数据的长度(rxLength);

rxLength = recvfrom(sock, rxdata, 1500, 0, NULL, NULL);
           //             ^ the buffer we are putting into

如果rxLength == 1500,我们收到了 1500 字节的数据,但我们需要确保它与我们发送的 1500 字节相同(而不是来自其他地方的 1500 字节数据,绕着网络飞)!例如,通常在比较少量用户输入时strncmp()可能会用到。我的建议strncmp()在这里不合适,但我想说的是,我认为在接收端拥有一个可能被调用的缓冲区不是一个好主意,expected_data例如,它包含 1500 x 'A'我遍历并比较两者,例如strncmp().

如何有效评估接收到的 1500 字节数据?[高效我的意思是快速。这将每秒发生数千次,因此代码需要相当优化!]。我对某种校验和有一个想法,因为我们知道我们应该收到什么,但我不确定这样做的好方法。任何人都可以提出一个好的校验和方法吗?或者,如果这是一个愚蠢的想法,您能否解释一下原因并推荐其他内容?

4

2 回答 2

2

首先考虑您将 1500 字节数据从机器 A 发送到机器 B 的特定过程,并检查您在此过程中是否有任何可能引入任何损失或损坏的步骤。可能是您的流程没有任何步骤来介绍其中任何一个。例如,如果您使用 TCP/IP 发送数据,则可以保证底层 TCP/IP 堆栈正确接收您的数据(如果有的话)。

另一方面,如果您有一些步骤引入了数据丢失、损坏、顺序更改等,那么您应该考虑 CRC,如果您非常重视性能的话。您可以在此处找到使用 CRC 的详尽解释和源代码示例:http ://www.barrgroup.com/Embedded-Systems/How-To/CRC-Calculation-C-Code

于 2012-05-21T19:59:03.927 回答
0

在对哈希函数和 CRC 进行了多次建议之后,我使用了这个答案中的代码来另一个问题,来制作一个简单的哈希函数。

于 2012-06-10T14:07:37.407 回答