Indy TCP 客户端示例?
Posted
技术标签:
【中文标题】Indy TCP 客户端示例?【英文标题】:Indy TCP client example? 【发布时间】:2015-04-09 02:51:12 【问题描述】:C++Builder 中是否有 Indy 10 套接字的示例代码?
Indy Demos page 上的两个示例链接是死链接,经过大量搜索,我找不到任何示例代码。
我正在编写一个客户端,它将发送和接收 JSON 消息,不需要复杂的协议或 SSL。
我已经能够根据 TIdTCPClient 的成员函数猜测写id1->Socket->WriteLn
发送一些被服务器接收但尚未弄清楚如何接收服务器响应的东西。
另外,是否有任何 Indy TCP 客户端的概述文档?在一些 Delphi sn-ps 中,我看到使用了 id1.IOHandler.WriteLn
,但我没有看到任何解释 IOHandler 的用途、我应该使用哪个、IOHandler.WriteLn 和 Socket.WriteLn 之间有什么区别等。
【问题讨论】:
@RemyLebeau 好的。我看到我第一次在那个演示中走错了路,最后得到了here,它只有 Flash 和 PDF,而不是使用 SVN 链接。该演示仅在 Delphi 中提供,但我猜总比没有好。 【参考方案1】:Indy Demos page 上的两个示例链接是死链接
该页面上唯一的死链接是 Ralph 的 TIdTCPClient/Server with SSL
演示。其他链接工作正常,包括TCP/IP Delphi&Indy10 Client Server Demo
的链接。
经过大量搜索,我一直找不到任何示例代码。
那么你搜索的不是很好,因为在 Embarcadero 和 Indy 论坛上发布了大量示例,甚至在 *** 上也是如此。
我已经能够根据 TIdTCPClient 的成员函数猜测写
id1->Socket->WriteLn
发送一些被服务器接收但尚未弄清楚如何接收服务器响应的东西。
TIdTCPClient
不是异步组件。只有当你告诉它读取时它才会读取。假设您的WriteLn()
正在发送请求,您可以在WriteLn()
退出后立即调用ReadLn()
(或任何您想要的读取方法),例如:
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 sn-ps 中,我看到使用了
id1.IOHandler.WriteLn
,但我没有看到任何解释 IOHandler 的用途、我应该使用哪个、IOHandler.WriteLn 和 Socket.WriteLn 之间的区别等.
提供Socket
属性是为了方便。当IOHandler
属性指向TIdIOHandlerSocket
对象时,Socket
属性返回相同的对象。这避免了对IOHandler
进行类型转换以访问任何特定于套接字的功能的任何需要。 Indy 实现了几个IOHandler
s 除了socket I/O,你也可以编写自定义IOHandler
s。
IOHandler
完成所有实际工作。在访问任何与 IO 无关的方法时,您应该使用IOHandler
属性而不是Socket
属性,例如WriteLn()
和ReadLn()
。这样,您可以随意换出不同的IOHandler
对象。这很有用,例如,在捕获套接字活动并将其重放以进行调试时。
【讨论】:
Indy TCP 客户端是否支持工作线程读取套接字,而另一个线程同时在同一个套接字上发送? 我的搜索发现您说“在 Embarcadero 和 Indy 论坛,甚至在 *** 上都发布了大量示例。”但我在 EDN 或 SO 上找不到任何此类示例。你能直接链接到他们吗?另外,我在 Indy 论坛上搜索了“TIdTCPClient 示例”,结果似乎都是 q/a 线程,而不是设置示例。 您的文档链接的最新版本是 10.1.5,但是在另一篇文章中我看到您说 XE4 带有 10.6 。 (所以我假设 XE5 至少也有 10.6) 正如我所说,文档有点旧,但它是唯一提供的官方文档。是的,XE5 附带 10.6.0(更高版本)。当前版本是 10.6.2。以上是关于Indy TCP 客户端示例?的主要内容,如果未能解决你的问题,请参考以下文章
使用 TLS 使用来自 DELPHI(Indy) 的 Gmail 传出 SMTP