问题标签 [indy10]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
9890 浏览

delphi - 是否可以在 Delphi XE 和 DataSnap 中使用 Indy 10.5.8.0?

案子

我正在尝试将 INDY 更新到我的 Delphi XE(更新 1)的最新版本,所以我从 indy.fulgan.com/ZIP 下载了最新的 INDY10 文件(Indy_4545.zip

包编译成功,现在我什至可以在关于框对话框中看到新版本 10.5.8.0,但在 IDE 重新启动后,我收到一条消息:

没有看到 encuentra el punto de entrada del procedimiento @Idhttp@TIdCustomHTTP@GetRequestHeaders$qqrv en la biblioteca de vínculos dinámicos IndyProtocols150.bpl。

我的免费英语翻译:

在动态链接库 IndyProtocols150.bpl 上找不到过程 @Idhttp@TIdCustomHTTP@GetRequestHeaders$qqrv 的入口点。

在快速比较新旧 IdHTTP.pas 后,我发现 TIdCustomHttp 类有很多变化,包括一些方法的重命名

  • GetResponseHeaders 到 GetResponse
  • GetRequestHeaders 到 GetRequest
  • SetRequestHeaders 到 SetRequest

随着在这个和其他和类接口中更改的公共/发布方法公司。

更新后,我得到了很多无法加载的包,包括 dclcxPivotGridOLAPD15.bpl,它又依赖于 dclDataSnapServer150.bpl,它遇到了 bpl 上的缺失方法。

AFAIK 我无法重新编译 dclDataSnapServer150.bpl (可能还有其他失败的包,我只是停在这里)。

IDE 上的 DataSnap 和 DevExpress 支持是我日常工作的必需品,所以

问题

  1. 是否有安全的预先建立的路径来更新到 Delphi XE 的最新 INDY?
  2. 如果不是,我是否可以通过创建旧的公共方法来压缩源代码并在实现部分调用新的方法来保证安全?
  3. 我是否遗漏了其他东西,或者我真的坚持使用 INDY 10.5.7 直到下一个 Delphi 次要/主要版本?
0 投票
2 回答
2735 浏览

delphi - Indy 的 TIdHTTPProxyServer:如何过滤请求?

我正在使用 TIdHTTPProxyServer 来实现一个简单的 HTTP 代理,但是如果它们与某些 URL 匹配,我现在想阻止一些连接。哪个事件和/或组件最适合实现这一目标?Indy 文档并不太详细。:(

谢谢!

0 投票
1 回答
1912 浏览

delphi - Indy 10 和设置套接字选项

也许解决这个问题的方法很简单,我只是太笨了,看不到它。我需要用 Indy 10 重新编译一个旧的应用程序,这行以前是

但是新的 TIdSocketHandle.SetSockOpt 需要 3 个整数。现在我应该如何提供 ip_mreq?只需传递 imr_multiaddr.S_addr 就会导致 #10014 错误 - 缓冲区错误。也许你们中的一个人有一个想法。

干杯安迪

0 投票
5 回答
431 浏览

delphi - 如果我编写程序以使用 Indy 9,我的程序能否在客户站点使用 Indy 10?

我在 Delphi 7 中编写了一个程序(包括一个使用 Indy 的 ModBus 组件)。在我的机器上,它使用 Indy 9 并且工作正常。它通过 ModBus 协议与其他机器进行良好的通信。但是,当程序在另一台机器上运行时,我会得到 90-100% 的 CPU 负载。不幸的是,这台机器不在我的办公室,而是“在世界的另一端”。如何确定这台机器使用的是 Indy 9 还是 Indy 10?而且,如果它正在运行 Indy 10,这可能是问题还是这不太可能?

0 投票
3 回答
4509 浏览

delphi - Indy TIdTCPClient 是否适合本地 TCP/IP 连接?

我需要使用 TCP/IP 连接连接到本地网络上的设备。当我使用 TIdTCPClient 时,一切正常,除了一件事:

如果连接不可用,大约需要 18-20 秒才能超时。无论我设置什么值,属性 ConnectTimeout 都不起作用。在超时之前总是需要相同的时间。

这个答案提到了超时的长时间延迟,我想知道这是否与 Indy 组件有关?

我必须找出连接是否不能很快建立,比如说最多在 1 秒内。

有没有办法使用 Indy 来做到这一点,还是我需要使用不同的组件/不同的方法?

(我使用的是 Delphi 2009 附带的 Indy 10 版本)

编辑
我按照这篇文章中的说明将 Indy 升级到最新版本。

还是一样,现在在没有连接时 TCPClient.Connect 返回始终需要 22 秒。ConnectTimeout 和/或 ReadTimeout 似乎对此没有影响。

0 投票
1 回答
977 浏览

delphi - Indy OnExecute 先读慢

我在 C++ Builder XE 中的 OnExecute 中有以下代码:

日志从获取命令 100 毫秒开始,然后爬到 300 毫秒,等待应用程序的其余部分运行。我认为OnExecute一旦数据进入缓冲区就会调用它,那么为什么第一次读取成功需要 100 到 300 毫秒?

在第一次读取相同的OnExecute所有其他数据之后,读取速度非常非常快(毫秒到亚毫秒)。

可能出了什么问题?

编辑:

在方法启动时:AContext->Connection->IOHandler->InputBuffer->Size为 0。第一次读取后返回AContext->Connection->IOHandler->InputBuffer->Size包含读取后缓冲区中剩余的内容。所以这意味着OnExecute在调用者实际可以使用任何数据之前调用它。所以 100-300 毫秒是 Indy 从套接字获取数据并在收到数据到达通知后将其放入缓冲区所花费的时间。这似乎太长了。

编辑:

删除do{,因为它暗示了一个不存在的循环。

0 投票
2 回答
1443 浏览

delphi - 在 indy10 中终止连接的最佳方法是什么?

我使用 indy10 进行通信,有时当客户端断开连接时会引发异常,我想知道断开连接(TIdContext)的最安全方法是什么?

我应该在 OnDisconnect 上做什么甚至类似的事情?

谢谢。

0 投票
7 回答
16140 浏览

delphi - 最佳实践:每次传输后保持 TCP/IP 连接打开还是关闭?

我的 Server-App 使用 TIdTCPServer,几个 Client 应用程序使用 TIdTCPClients 连接到服务器(所有计算机都在同一个 LAN 中)。

一些客户端只需要每隔几分钟就与服务器联系一次,而另一些则每秒一次,而一个客户端每秒会这样做大约 20 次。

如果我保持客户端和服务器之间的连接打开,我将保存重新连接,但必须检查连接是否丢失。

如果我在每次传输后关闭连接,每次都必须重新连接,但无需检查连接是否仍然存在。

做这个的最好方式是什么?

一般来说,我应该以什么频率的数据传输保持连接打开?

这两种情况的其他优点/缺点是什么?

0 投票
2 回答
2907 浏览

delphi - 如何在 Delphi 应用程序中阅读 HTML 格式的电子邮件?

我创建了一个可以从 Exchange 2007 读取电子邮件的程序。但是,它只能读取纯文本格式的电子邮件正文。当我尝试以 HTML 格式检索电子邮件时,我的软件无法读取正文并且它总是空白。我正在使用 Delphi 2007 和 IMAP 9。

更新:

这是我的代码:

0 投票
1 回答
1377 浏览

delphi - 在 Indy (TIdContext) 中的 2 个连接之间直接传输数据

我有一个运行 TIdTCPServer 的服务器,客户端使用 Web 浏览器(或任何其他软件)进行通信,我不知道协议,但我想做的是在客户端和另一个连接之间发送数据(都连接到同一个 TIdTCPServer)例如,第一个客户端发送的数据被传输到第二个客户端,第二个客户端发送的数据被传输到第一个客户端,就像代理一样(我不能真正使用代理服务器,因为它只是这个条件)和TIdTCPServer 应该仍在接收其他客户端并处理它们的数据。

我偶然发现了第一行代码,因为 TIdContext.Connection.Socket.ReadLn 需要分隔符,并且服务器不知道客户端的协议。

有任何想法吗?

谢谢。