Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Indy IdTCPClient+Firemonkey(iOS):在建立连接之前是否会触发OnConnect?_Delphi_Firemonkey_Indy10 - Fatal编程技术网

Delphi Indy IdTCPClient+Firemonkey(iOS):在建立连接之前是否会触发OnConnect?

Delphi Indy IdTCPClient+Firemonkey(iOS):在建立连接之前是否会触发OnConnect?,delphi,firemonkey,indy10,Delphi,Firemonkey,Indy10,我正在尝试使用Indy IdTCPClient从FireMonkey iOS应用程序建立一个简单的TCP连接。如果在FireMonkey中使用,请在建立与服务器的成功连接之前立即连接。因此,不可能处理可能发生的连接异常 我是唯一有这个问题的人还是我做错了什么?我使用XE7。在套接字物理连接到服务器之后,在交换任何数据之前,以及在连接退出之前,会立即触发OnConnected事件。如果发生错误,将引发异常。只需使用try/except块包装连接即可捕获连接错误,例如: try Client.C

我正在尝试使用Indy IdTCPClient从FireMonkey iOS应用程序建立一个简单的TCP连接。如果在FireMonkey中使用,请在建立与服务器的成功连接之前立即连接。因此,不可能处理可能发生的连接异常

我是唯一有这个问题的人还是我做错了什么?我使用XE7。

在套接字物理连接到服务器之后,在交换任何数据之前,以及在连接退出之前,会立即触发OnConnected事件。如果发生错误,将引发异常。只需使用try/except块包装连接即可捕获连接错误,例如:

try
  Client.Connect;
except
  // handle connection error
end;
由于Indy操作是阻塞的,所以您想在OnConnected中使用的任何代码都可以在Connect退出后执行,例如:

//Client.OnConnected := ClientConnected;
try
  Client.Connect;
except
  // handle connection error
end;

...

procedure TMyForm.ClientConnected(Sender: TObject);
begin
  // connection successful, do something
end;

Indy具有阻塞式通信,您根本不必使用事件?也许可以尝试使用OnConnected事件。VCL应用程序就是这样。但不是通过FireMonkey应用程序。您示例中的代码也正是我所做的。这就是问题所在。我给了一个故意错误的主机和端口。使用这些主机/端口,套接字无法进行物理连接,但OnConnected仍然会在连接后立即启动,并尝试将数据发送到服务器。没有连接错误,什么都没有。Indy在所有平台上都以相同的方式运行,在所有平台上使用相同的BSD兼容套接字API。相信我,我是Indy的主要开发人员,因此我知道Connect的运行方式与您描述的不同。在正常情况下,这在物理上是不可能的。OnConnected可以触发的唯一方法是在调用底层套接字API connect函数时操作系统不报告错误。如果成功,则已建立连接。另外,不要忘记,必须先将非IP主机解析为IP,这样,对于无效主机,另一个检查连接可能会失败。您所描述的只有在Delphi的异常处理在iOS上被破坏时才可能实现,这是极不可能的。Remy,我知道您是Indy开发人员,我100%信任您。我非常感谢你花宝贵的时间帮助我解决问题。但这正是我所描述的。我刚刚安装了iOS模拟器7.18.1,但还不能工作,代码在sumulator中运行得非常好。此问题只影响设备。然后,您必须在设备上调试应用程序,并查看故障点的实际位置。Indy希望iOS报告一个错误,如果是这样,那么将引发一个异常。如果这种情况没有发生,那么要么iOS坏了,要么Delphi坏了。Indy使用相同的套接字代码,事实上,除了Windows,FireMonkey的所有平台都使用相同的TIdStack派生类。更糟糕的情况是,编写一些代码来进行Indy使用的相同socket API函数调用和异常引发调用,看看哪一个行为不正常。
try
  Client.Connect;
except
  // handle connection error
  raise;
end;
// connection successful, do something