2017-07-10 124 views
0

在下面的代碼我有一些相關的問題TidUDPClient通代理服務器

var 
    UseProxy : Boolean = True; 
.... 
var 
    IdUDPClient : TIdUDPClient; 
    sText  : string; 
begin 
    IdUDPClient := TIdUDPClient.Create(nil); 
    try 
    IdUDPClient.Host := '10.10.10.10'; 
    IdUDPClient.Port := 5555; 
    if UseProxy then begin 
     IdUDPClient.TransparentProxy.Enabled := True; 
     IdUDPClient.TransparentProxy.Host := '20.20.20.20'; 
     IdUDPClient.TransparentProxy.Port := 8080; 
     IdUDPClient.OpenProxy; 
    end; 
    try 
     IdUDPClient.Connect; 
    except 
     Writeln('Connect Error.'); 
    end; 
    if IdUDPClient.Connected then 
     Writeln('Connected') 
    else begin 
     Writeln('Not Connected'); 
     Exit; 
    end; 
    try 
     IdUDPClient.Send('Foo'); 
     try 
     sText := IdUDPClient.ReceiveString(1000); 
     Writeln('Received: ', sText); 
     except 
     Writeln('Receive Error.'); 
     end; 
    except 
     Writeln('Send Error.'); 
    end; 
    if UseProxy then 
     IdUDPClient.CloseProxy; 
    finally 
    IdUDPClient.Free; 
    end; 
    Readln; 
end. 
  1. 爲什麼try...except塊未捕獲的錯誤UDP 客戶端上即使主機不可達也不端口例如關閉IdUDPClient.Connected總是True
  2. 當使用代理我不知道如果我的實現是上面 正確的,因爲如果UseProxy是真正的IdUDPClient嘗試直接發送 請求10.10.10.10沒有直通的代理服務器。我如何解決這個問題?我做錯了什麼?

我的代理測試場景爲如下:

  • 我的電腦IP 30.30.30.30
  • UDP服務器10.10.10.10
  • 代理Sever的(襪子5)20.20.20.20

30.30.30.0/24着達到10.10.10.1020.20.20.20呢。

  1. 如果我的電腦可以直接訪問UDP服務器,並且將假代理服務器(帶有隨機端口的未使用IP)發送到客戶端。客戶端可以訪問由於代理關閉而不應該到達的UDP服務器。我不能防止這種情況?

回答