2012-10-19 28 views
1

我有一個印地部件:IdMappedPortTCP - 無活動

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與包括Indy組件

回答

3

MappedHost/MappedPort性質告訴TIdMappedPortTCP它連接到一旦客戶端已連接到它。您正在告訴TIdMappedPortTCP連接到189.200.10.71:5300。如果你的其他應用程序也連接到189.200.10.71:5300,那麼它完全繞過TIdMappedPortTCP。這就解釋了爲什麼這些事件不觸發(順便說一句,TIdMappedPortTCP是一個多線程的組件,但您的事件處理程序不是線程安全的)。

要通過TIdMappedPortTCP,客戶端需要連接到TIdMappedPortTCP.Bindings集合正在偵聽的IP /端口,而不是分配給MappedHost/MappedPort屬性的IP /端口。

+0

謝謝雷米...在我的brain.exe故障我認爲...所以我需要設置默認的主機/端口到我的應用程序將連接到(如127.0.0.1:1000)的權利? –

+0

如果您配置了'TIdMappedPortTCP'來偵聽端口1000上的127.0.0.1上的客戶端,那麼是的。 –

+0

嗯......試過了..但會導致我遇到以下問題......我無法改變其他應用程序的目標IP地址。它使用IP的directely所以主機的操作不會幫助那裏... –