C ++ Builder中是否有Indy 10套接字的示例代码?
Indy Demos page上的两个示例链接是死链接,我在广泛搜索后无法找到任何示例代码。
我正在编写一个发送和接收JSON消息的客户端,不需要复杂的协议或SSL。
我已经能够根据TIdTCPClient的成员函数进行猜测,编写id1->Socket->WriteLn
来发送服务器收到但尚未弄清楚如何接收服务器响应的内容。
此外,Indy TCP客户端是否有任何概述文档?在一些Delphi片段中,我看到id1.IOHandler.WriteLn
使用了,但我没有看到IOHandler的用途,我应该使用哪一个,IOHandler.WriteLn和Socket.WriteLn之间的区别等等。
答案 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
个对象。例如,在捕获套接字活动并将其重放以进行调试时,这很有用。