2009-08-21 8 views
1

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

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

長期的な解決策は、データをハードウェアにバッファリングし、PCがTCPを介して必要なデータを取得するようにすることですが、解決策が導入されるまで短期間で欠落メッセージの問題を解決/最小化する必要があります。アイデアは、次のとおりです。 - 伝送 前に、不要なメッセージをフィルタリング - - PC アップグレードにハードウェアに別々のUDPメッセージを組み合わせて単一の大きな1 - 私が探している

をメッセージを受信するためにPCで複数のソケットを使用してこれらのアイデアへのフィードバック、欠落した可能性のあるもの

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

答えて

0

ここでの解決方法は、使用されていた古いPC(512MB RAMの1.6GHz Celeron)を正しいスペックマシン(2GHz Core 2プロセッサ2GBのRAMを搭載)。

1

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

また、20個のボックスしかない場合は、12秒間に20個のメッセージを送信します。これは、毎秒33メッセージしか意味しません。これは実際にはピーナッツです...ネットワークとプロセッサのためです。

パッケージが削除される唯一の理由は、他にもネットワークの負荷が増えていることです。ネットワークカードとルータは、udp以上のtcp-ipパッケージを好む傾向があります。

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

+0

ネットワーク上に他のトラフィックはありません。プライベートLANです。 私はネットワークの負荷が高くないことに同意します - それは 'バースト的ですが、12の境界で送信された12個のメッセージのバンドルです。私の推測では、複数のボックスからのメッセージバーストが一緒に発生しており、結果としてPCには見られないということです。 – IanH

+0

私は彼らがそうでないと思っています(これを同期するのは非常に難しいでしょう)。私はネットワーク設定、スイッチ/ハブなどを調査します。これらのマシンはどのようなプラットフォームで動作していますか? – Toad

+0

これらのボックスはカスタムハードウェアで、LWiPスタックを実行します。ネットワーク上の他のデバイスは、スイッチ(管理されていない10/100)とPCだけです。同期化は、20個のボックスの同時スイッチオンのアーチファクトであり得る。 – IanH

1

最も可能性の高い問題はネットワーク上です。

あなたはすでにネットワークがプライベートLANであると言っていますが、これは私の提案の1つを排除し、もう1つはネットワークがスイッチされていることを確認することです。

これで問題が解決しない場合、PCの受信バッファサイズを増やすことができます。 http://www.developerweb.net/forum/showthread.php?t=5773

+0

ネットワークが確実に切り替わります。 rxバッファのサイズを調査します。 – IanH

関連する問題