マシンAからマシンBに1500バイトのデータを送信するプログラムをC++で作成しています。
次のように想定します。
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();
したがって、このバッファを埋めるために文字「A」を1500回使用します(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
たとえば1500x'A'を含むバッファを用意するのは良い考えではないと思うということです。ループして、のように2つを比較しstrncmp()
ます。
受信した1500バイトのデータを効率的に評価するにはどうすればよいですか?[効率的とは、すぐに意味します。これは1秒間に数千回発生するため、コードはかなり最適である必要があります!]。何を受け取るべきかがわかっているので、ある種のチェックサムについて考えましたが、これを行うための良い方法がわかりません。誰かが良いチェックサム方法を提案できますか?あるいは、それがばかげた考えである場合、その理由を説明し、おそらく他の何かをお勧めしますか?