【发布时间】:2017-07-11 00:45:11
【问题描述】:
在下面的代码中我有一些相关的问题
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.
- 为什么
try...except块没有捕获UDP上的错误 客户端即使主机不可访问或端口已关闭,例如IdUDPClient.Connected总是True? - 使用代理时,我不确定我的实现是否正确
因为如果
UseProxy是 True IdUDPClient 尝试直接发送 对10.10.10.10的请求不通过代理服务器。我该如何解决这个问题?我做错了什么?
我的代理测试场景如下:
- 我的电脑IP
30.30.30.30 - UDP 服务器
10.10.10.10 - 代理服务器(Socks 5)
20.20.20.20
30.30.30.0/24 无法到达 10.10.10.10 但 20.20.20.20 可以。
- 如果我的 PC 可以直接访问 UDP 服务器并且我将假代理服务器(未使用的 IP 和随机端口)放到客户端。客户端可以访问由于代理已关闭而不应访问的 UDP 服务器。我怎么不能防止这种情况发生?
【问题讨论】: