2017-01-18 6 views
0

私はこのアプローチを理解しようとしています大丈夫、私は2台のサーバーTidtcpserverはマルチポートでリッスンしていますか?

サーバーAはIpの1.1.1.1にあり、ポート36663 サーバーB iは、IP 2.2.2.2およびポートに54223

で実行していると言うことができますこのアプローチを理解できるように依頼しています

私はサーバーAのクライアントをサーバーBのクライアントと通信できるようにすることはできますか? 例として、クライアントがサーバAに接続していて、サーバBに接続しているクライアントにデータを送信したいのですが、これはindy tcpサーバを使用して行うことができますか?

回答が「はい」の場合、このアプローチを完全に理解するためには参考になるでしょう。

私は別のマシン上の2台のサーバー

1機は、いくつかの低速のネットワークの問題を持っているし、他のは良いネットワークを持っています。

この20秒の間に、接続するために20秒以上を要するサーバAにクライアントが他のサーバのIPへの再接続を試みると、既にサーバA

答えて

1

にcoonnectedクライアントと通信することができたときに、ここでロジックがありますTIdTCPServerにはBindingsというプロパティがあり、これはサーバーがリッスンするIP /ポートのペアの集合です。 1つのTIdTCPServerオブジェクトを複数のIP /ポートペアでリッスンすることができます。また、異なるマシンでを受信する複数のTIdTCPServerオブジェクトを使用することもできます。

どちらの方法でも、接続されたクライアントはTIdTCPServer.Contextsプロパティに格納されます。クライアントは関係なく、どのサーバーIP /ポートのそれが接続され、別のクライアントにデータを送信したい

、あなたがしなければならないすべてはあなたがのTIdContextオブジェクトを見つけるまで、適切なTIdTCPServerオブジェクトのContextsリストを反復ですターゲットクライアントにアクセスし、そのクライアントのConnection.IOHandlerプロパティにアクセスします。一方


あなたは異なるマシン上で実行している別のTIdTCPServerオブジェクトを持っている場合、クライアントが直接別のサーバー上のクライアントと通信することはできません。 2つのサーバー間に接続を確立し、必要に応じてその接続を介してクライアントからクライアントへのデータをプロキシすることができます。

+0

バインディングに複数のIPとポートを追加するだけです。この方法は、サーバAがサーバBに接続してサーバAと通信できるように長い時間がかかる場合など、いくつかの失敗接続を処理するために必要です。 –

+0

ポートは、接続にかかる時間に影響しません。同じサーバーマシン*で2つのポート*を開くと、クライアントはいずれかのポートに接続することができ、いずれの場合でも同じ時間がかかるはずです。今、あなたが* 2台のサーバーマシンを持っていて、お互いに話をしたいのであれば、それはまったく別の問題です。実際の状況を明らかにするために質問を編集することをお勧めします。 –

+0

いいえ別のマシンサーバではありません。 –

関連する問題