1

C++Builder 中是否有 Indy 10 套接字的示例代码?

Indy Demos 页面上的两个示例链接是死链接,经过大量搜索后我无法找到任何示例代码。

我正在编写一个客户端,它将发送和接收 JSON 消息,不需要复杂的协议或 SSL。

我已经能够根据 TIdTCPClient 的成员函数进行猜测,以编写 id1->Socket->WriteLn发送由服务器接收但尚未弄清楚如何接收服务器响应的内容。

另外,是否有任何 Indy TCP 客户端的概述文档?在我看到的一些 Delphi 代码片段中,我看到id1.IOHandler.WriteLn了 IOHandler 的用途,我应该使用哪一个,IOHandler.WriteLn 和 Socket.WriteLn 之间有什么区别等的任何解释。

4

1 回答 1

3

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

于 2015-04-10T00:55:47.257 回答