Indy Demos 页面上的两个示例链接是死链接
该页面上唯一的死链接是 Ralph 的TIdTCPClient/Server with SSL演示。其他链接工作正常,包括TCP/IP Delphi&Indy10 Client Server Demo.
经过大量搜索,我一直找不到任何示例代码。
那么你搜索的不是很好,因为在 Embarcadero 和 Indy 论坛上发布了大量示例,甚至在 StackOverflow 上也是如此。
我已经能够根据 TIdTCPClient 的成员函数进行猜测,以编写 id1->Socket->WriteLn发送由服务器接收但尚未弄清楚如何接收服务器响应的内容。
TIdTCPClient不是异步组件。只有当你告诉它读取时它才会读取。假设您WriteLn()正在发送请求,您可以在退出ReadLn()后立即调用(或任何您想要的读取方法)WriteLn(),例如:
id1->Socket->WriteLn("JSON data here");
String response = id1->Socket->ReadLn();
如果要异步读取响应,请在单独的工作线程中进行读取。
另外,是否有任何 Indy TCP 客户端的概述文档?
官方文档在 Indy 的网站上:
http://www.indyproject.org/Sockets/Docs/index.aspx
http://www.indyproject.org/docsite/html
文档有点旧,尤其是类参考部分,但概述仍然在很大程度上适用。
在我看到的一些 Delphi 代码片段中,我看到id1.IOHandler.WriteLn了 IOHandler 的用途,我应该使用哪一个,IOHandler.WriteLn 和 Socket.WriteLn 之间有什么区别等的任何解释。
该Socket物业是为了方便而提供的。当IOHandler属性指向一个TIdIOHandlerSocket对象时,该Socket属性返回该对象。这避免了任何需要类型IOHandler转换来访问任何特定于套接字的功能。IOHandler除了socket I/O,Indy还实现了几个s,你也可以写自定义IOHandlers。
IOHandler做所有真正的工作。在访问任何与 IO 无关的方法(如和)时,您应该使用该IOHandler属性而不是该属性。这样,您可以随意换出不同的对象。例如,在捕获套接字活动并重放它以进行调试时,这很有用。SocketWriteLn()ReadLn()IOHandler