1

私はインディコンポーネントを持っています:

IdMappedPortTCP1: TIdMappedPortTCP;

および次の初期化:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Clear;
  IdMappedPortTCP1.MappedHost := '189.200.10.71';
  IdMappedPortTCP1.MappedPort := 5300;
  IdMappedPortTCP1.Active := true;
end;

procedure TForm1.IdMappedPortTCP1Execute(AContext: TIdContext);
begin
  Memo1.Lines.Add(AContext.Data.ToString);
  Memo1.Lines.Add('------');
end;

procedure TForm1.IdMappedPortTCP1OutboundData(AContext: TIdContext);
begin
  Memo1.Lines.Add(AContext.Data.ToString);
  Memo1.Lines.Add('+++++++'); //
end;

私の他のアプリケーションは189.200.10.71:5300に接続しますが、コンポーネントが起動していません...

私のせいはどこですか?

インクルードインディコンポーネントでXE3を使用する

4

1 に答える 1

3

MappedHost/MappedPortプロパティは、TIdMappedPortTCPクライアントが接続した後の接続先を示します。TIdMappedPortTCPに接続するように指示してい189.200.10.71:5300ます。他のアプリも接続している場合は、完全189.200.10.71:5300にバイパスされていTIdMappedPortTCPます。これが、イベントが発生しない理由を説明しています(BTWTIdMappedPortTCPはマルチスレッドコンポーネントですが、イベントハンドラーはスレッドセーフではありません)。

を通過するTIdMappedPortTCPには、クライアントは、プロパティTIdMappedPortTCP.Bindingsに割り当てられたIP /ポートではなく、コレクションがリッスンしているIP/ポートに接続する必要がありMappedHost/MappedPortます。

于 2012-10-19T02:35:51.410 に答える