2

UDP(データのサイズ150バイト)を使用して1つのPCから別のPCにデータを送信するプログラムがあります。そのプログラムはdelphi7(データの送受信に使用するTldUDPClientおよびTldUDPServerコンポーネント)で記述されています。このプログラムを30%のパケット損失でテストする必要があります。

ipfwはWindowsに使用しています(sourceforgeからダウンロード):

ipfw -f flush
ipfw add pipe 1 ip from any to any out
ipfw pipe 1 config plr 0.3

pingを使用すると、データが30%失われることがわかります。

delphiプログラムを起動すると、しばらく作業した後、エラーが返されますsocket error 10004。エラーの説明は次のとおりです。関数呼び出しが中断されました。の呼び出しにより、ブロッキング操作が中断されましたWSACancelBlockingCall

ネットワークコンポーネントとパケット損失エミュレーションの間の機能の問題ですか?それとも、実際の状況でも、パケット損失が発生したときにそれがわかりますか?パケット損失のエミュレーションに使用できる別のファイアウォールまたは別のソフトウェアはどれですか?

4

1 に答える 1

3

パケット損失エミュレーションの問題のように聞こえます。ipfwツールが接続を中断しているようです - このサイトから-使いのバージョンですか? - ソース コードはこのオプションを実装していませんが、4 年前のものです。ping コマンドを使用すると、予期された時間内に応答を受信しなかったことがわかります。ARP プロトコル AFAIR には「接続」がありません。

UDP 標準から、パケット損失は苦痛ではありません。ソケット層に取得される確認メッセージもエラー メッセージもありません。

実際のネットワーク接続では、UDP パケットは黙って失われます。

そして痛々しいほど...おそらく;)

于 2011-11-23T14:12:11.243 に答える