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