1

UDP 経由で 20 個のカスタム ハードウェア ボックスからデータを受信する PC プログラムがあります。これらの各ボックスは、PC 上の単一の UDP ソケットに UDP メッセージを継続的に送信します。メッセージにはすべて 10 ~ 150 バイトのデータが含まれており、各ユニットは 12 秒で約 20 個のメッセージを送信します。

テストでは、一部のメッセージが PC によって見落とされていることが示されています。ネットワーク上のボックスが少ないほど、メッセージの見逃しが少なくなります。

長期的な解決策は、データをハードウェアにバッファリングし、必要に応じて PC が TCP 経由でデータを取得できるようにすることですが、その解決策が展開されるまで、メッセージの欠落の問題を短期的に解決/最小化する必要があります。- PC をアップグレードする - 送信前に不要なメッセージを除外する - ハードウェア内の個別の UDP メッセージを 1 つの大きなメッセージに結合する - PC 内の複数のソケットを使用してメッセージを受信する

これらのアイデアに関するフィードバックと、見逃した可能性のあるものを探しています。

受信プログラムは、Indy9 を実行する C++Builder プログラムです。

4

3 に答える 3

1

最も可能性の高い問題はネットワークにあります。

ネットワークはプライベート LAN であるとおっしゃいましたが、これは私の提案の 1 つを排除します。もう 1 つは、ネットワークが確実に切り替えられるようにすることです。ハブは簡単にパケットを失う可能性があります。

それでも問題が解決しない場合は、PC の受信バッファ サイズを増やしてみてください。 http://www.developerweb.net/forum/showthread.php?t=5773

于 2009-08-21T12:16:13.347 に答える
1

UDP でドロップされたメッセージは、ネットワーク上の NET 輻輳に関係しています。パッケージを受け取るために 1 つまたは 5 つのソケットを使用する場合は、何もしません。

また、ボックスが 20 個しかない場合は、12 秒で 20 個のメッセージを送信します。これは、1 秒あたり 33 メッセージしかないことを意味します。これは本当にピーナッツです...ネットワークとプロセッサにとって。

したがって、パッケージが削除される唯一の理由は、他にも多くのネットワーク負荷が発生していることです。ネットワーク カードとルーターは、udp よりも tcp-ip パッケージを優先する傾向があります。

過剰なネットワーク負荷が発生していない場合、UDP パッケージは削除しないでください。

于 2009-08-21T11:53:03.457 に答える
0

提案してくれた他の人たちに感謝しますが、振り返ってみると、ここでの解決策は、使用されていた古い PC (1.6 GHz Celeron、512 MB RAM) を正しいスペックのマシン (2 GHz Core 2 プロセッサ、2 GB RAM) に置き換えることでした。

于 2009-08-25T12:11:35.557 に答える