Indy TCP客户端示例?

时间:2015-04-09 02:51:13

标签: indy c++builder-xe5

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

Indy Demos page上的两个示例链接是死链接,我在广泛搜索后无法找到任何示例代码。

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

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

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

1 个答案:

答案 0 :(得分:2)

  

Indy Demos page上的两个示例链接是死链接

该页面上唯一的死链接是拉尔夫的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进行类型转换以访问任何特定于套接字的功能。除了socket I / O之外,Indy实现了几个IOHandler,你也可以编写自定义IOHandler

IOHandler完成所有实际工作。在访问任何与IO无关的方法时,您应该使用IOHandler属性而不是Socket属性,例如WriteLn()ReadLn()。这样,您可以随意更换不同的IOHandler个对象。例如,在捕获套接字活动并将其重放以进行调试时,这很有用。