2016-11-08 30 views
0

私は、同じPC上の複数のサーバーをシミュレートするTIdTCPServerを使用してDelphiでテストサーバープログラムを作成しました。これは、呼び出しIdTCPServer1.Bindings.Addによってバインドに複数のポートを追加します。これはうまくいく。ソケットエラーをシミュレートする方法

しかし、私はまた、クライアントにソケットエラーを返さなければならないポートに対して、ネットワークの接続されていないエラーをシミュレートしたいと思っています。私はそのポート用のBindings.Deleteを試してみましたが、CloseSocketを試しましたが、成功しませんでした。ポートを無効にしたり削除したりして、そのエラーをシミュレートする方法に関するアイデアはありますか?

+0

私はあなたがサーバーコンポーネントを解放することができますが、それはそれを行うにはかなり汚い方法だと思います。 –

+1

何も送信しないことで読み取りタイムアウトが発生する可能性があります.SO_LINGERをゼロタイムアウトでオンに設定してソケットを閉じることで接続をリセットすることはできますが、ケーブル引き込みやルータの停止をシミュレートすることはできません。 – EJP

+1

ネットワークの損失や接続の喪失をシミュレートするときに、ポートまたはIPアドレスの範囲をブロックするようにファイアウォールルールを設定します。 – selbie

答えて

0

私はコメントとして投稿ですが、今、私はそれについて考えることを、私は(多分あなたが望んでいたではない何が)、これは「最善のアプローチ」の答えです信じて:

OSは、「保護」されます1台のマシンでネットワークエラーをシミュレートするのは不可能な頭痛に近いものです。

しかし、VM(仮想マシン)を使用すると簡単に実行できます。「クライアント」としてVMを使用してサーバーアプリケーションに接続し、警告なしでVMを強制終了します(仮想マシンの電源を切る)ネットワークエラーが発生します。

また、OSのカーネルレイヤを迂回して、rawソケットにユーザーランドTCP/IPプロトコルを実装することもできます.VMは簡単です。

+0

私はマルチクライアントワークフローをテストするために、異なるマシン/ VMを実行しないようにこのプログラムを具体的に作成しました。私はVMの方法に行く前に、他のオプションを探求します。ありがとう。 – user173399

関連する問題