2009-04-29 12 views
0

Indyを使用して着信メッセージをエミュレートすることは可能ですか(重要なことは:Indy 10とDelphi 2009を使用しています)?私はこれらのメッセージをローカルで作成できるようにしたいと思い、Indyがネットワークの特定のクライアントから来たものだと考えてほしい。すべての内部Indy処理(メッセージが受信されたスレッドの選択とそのようなもの)は、メッセージがネットワークを介して到着した場合とまったく同じでなければなりません。Indyの着信ネットワークメッセージをエミュレート

これに関するアイデアはありますか?事前に任意のヒントをありがとう。

答えて

5

あなたがしたいことは、もっと低いレベルでこれを行う必要があるため、Indyとは関係ありません。 Indyが特定のクライアントから送信されるメッセージは、適切に準備されたパケットをネットワークスタックに注入することだとIndyが判断する最も簡単な方法です。 GoogleまたはWikipediaのTCPパケット注入に関する記事を読んでください。 EtterCapは、確立された接続にパケットを注入できるツールの1つです。しかし、一部の国ではツールの一部が違法であるため、これは間違いなく灰色の領域に入ります。

とにかく、これはすべてIMHOです。正確に何をしたいのかわかりませんが、特別に準備されたクライアントまたはサーバーは、サーバーまたはクライアントアプリケーションを開発する際に特定の動作をエミュレートするツールとしてはるかに優れています。それらをローカルで実行することも、別のIPアドレスまたはサブネットを持つ必要がある場合は、仮想マシンで多くのことを実行できます。

+1

いつものように+1、すばらしい答え!しかし、私にとっては悪いニュース:( – jpfollenius

0

Indyにはこのためのメカニズムが組み込まれていませんが、私の頭の上から考えて、あなたの開発マシンでローカルに実行され、Indyサーバーに接続する小さなテストアプリケーション(またはスイート)を構築することをお勧めしますメッセージを再生するアプリケーション。

サーバースレッドが作成され、処理されたコマンドが両方のシナリオと同一のメカニズムとして、TCP接続がローカルまたはリモートホストから行われる場合は、Indyサーバーアプリケーションとは無関係です。

私の最後のギグはIndyを使用しており、すべてのテストはローカルのメッセージファイルを読み込んでIndyサーバーアプリケーションに送信する同様のResenderタイプのアプリケーションで行われました。

HTHと幸運!

+0

しかし、Indyはローカルで動作しているアプリケーションのIPアドレスとポート番号を取得し、その接続用に作成された追加のリスナースレッドで受信メッセージの処理が実行されています。メッセージを送信する別のクライアントと同じ効果はありません。とにかく答えてくれてありがとう! – jpfollenius

+0

Indyが着信接続の新しいリスナースレッドをローカルまたはリモートのいずれかに作成するため、あなたのコメントは混乱しています。私はあなたがTIDTCPServerを使用しており、あなたのコマンドハンドラを定義していると仮定しています。 TidTCPServerは、新しい接続の新しいスレッドを作成し、その新しく作成されたスレッドのコンテキストでコマンドハンドラを処理します。 – Nazar

+0

まさに!クライアントがメッセージを送信することなく、クライアント固有のリスナースレッドでコマンドを実行する必要があります。わかる? – jpfollenius

0

テストクライアントを実行する仮想マシンを作成すると、「ローカルマシン」と見なされず、VMSとの複雑なネットワークを簡単に作成できるようになります。十分なメモリとディスクスペース。 VMを使用してテストするもう1つの利点は、展開に集中する時間があれば、開発環境を完全になくすことができることです。一人でどれだけの時間を節約するのか驚くべきことです。

VirtualPCは、Microsoftから無料でダウンロードでき、かなりうまく動作します。 VMWareには別のオプションがありますが、もう少し費用がかかります。開発目的のために、私はデスクトップ版を好むが、サーバー版もうまくいく。仮想OSをインストールするためのライセンスが必要です。 MSDNメンバーシップはおそらく最も安価な方法であり、OSの他の味のテスト環境を構築することができます。

+0

VMWare Serverは無料で、VMWare ESXiもSunのVirtualBox – mjn

0

Indyには、クロスプラットフォームサポート(IDStack.pas)のための抽象的なスタックメカニズムがあります。私はWindows用のスタック(IdStackWindows.pas)をハックすることができると思います。それはクラスです。 Uはそれを派生させ、ハックを行うためにいくつかの関数をオーバーライドすることさえ考えています。