问题标签 [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 投票
1 回答
6842 浏览

delphi - SSL 支持 smtp.live.com 和 TIdSmtp (Indy, Delphi)

我正在尝试连接到 smtp.live.com 以发送电子邮件(live.com 自 2009 年以来显然支持免费 pop3/smtp,但这对我来说完全是新闻)。

以下是我尝试连接到 smtp.live.com 端口 587 时发生的情况:

我对 sslvSSLv23 和 sslvTLSv1 使用相同的代码,它与 gmail smtp(smtp.gmail.com,端口 465)服务器正常工作。此外,Outlook 在检查 SSL 时会在端口 587 上正常发送邮件,因此可能与 OpenSSL 有关。谁能帮我解开这个谜?我错过了设置吗?

0 投票
1 回答
4405 浏览

delphi - Indy TCPServer 在发送包过于频繁时不会收到来自 TCPClient 的所有包

Indy TCP 连接有问题。我使用带有 Indy 10 的 Turbo Delphi 2006。我想将多个 TCP 包从 idTCPClient 发送到 idTCPServer。

当我只想发送一个包,或者我在函数的两次调用之间插入一个 sleep(100) 命令时,它工作得很好。但是如果我调用这个函数过于频繁,它不会每次都调用服务器的onExecute。

我的发送代码:

我多次调用此函数(每秒 5-10 次),并希望在我的服务器应用程序中处理所有这些包:

提前感谢您的回答!

0 投票
1 回答
2997 浏览

delphi - Delphi Indy 10 Smtp 错误“目前无法验证”

我正在使用这段代码从 delphi indy 发送测试消息。我有一个 TidSMTP、TIdMessage 和 IdSSLIOHandlerSocketOpenSSL;

在下面的代码中,如果我将其设置为使用带有 ssl 的 gmail,它可以正常工作,但是一旦我用我的 cpanel 邮件服务器详细信息替换我的服务器详细信息,它就不起作用错误:

“目前无法进行身份验证”。

我使用了与在 Outlook 2007 中设置帐户相同的详细信息。这是代码

IdSSLIOHandlerSocketOpenSSL 详细信息。

任何帮助都会被应用。

0 投票
1 回答
400 浏览

delphi - TAzureBlobService 和 TAmazonStorageService 的进度事件

将数据上传或下载到云服务(使用 TAzureBlobService 或 TAmazonStorageService)时,似乎没有任何方法可以获取有关上传/下载进度的反馈。

我可以看到最终调用了 TIdTCPClientCustom.Connect ,并且在该函数中,如果不存在连接,它会为连接创建一个默认的 IOHandler(除非使用 SSL,否则它不会)。如果我可以为该 IOHandler 设置 OnWorkBegin、OnWorkEnd 和 OnWork 事件,那么我可以跟踪进度,但我看不到这样做。

如果使用 SSL 连接,则创建一个 IOHandler(例如在 TAzureBlobService.PrepareRequest 中),但 IOHandler 是一个接口并且没有 OnWorkBegin 等属性。

我认为解决方案是创建一个派生自 TAzureBlobService 或 TAmazonStorageService 的类,然后覆盖 PrepareRequest 方法。在那里我可以访问 TCloudHTTP 实例(因为它是在 PrepareRequest 中创建的),然后我可以访问 IOHandler。但是如何创建 IOHandler(因为它被定义为接口)并设置事件(不是该接口的一部分)?

谢谢

0 投票
1 回答
1454 浏览

installation - 使用 TMS 组件包升级 Indy10 (C++ Builder)

到目前为止,我一直在使用 Indy 10 没有问题,但是在最近安装 TMS 组件包出现问题之后,我正在寻找升级 Indy 的替代方法。TMS 可以在带有 CB2010 的干净系统上正常安装,但是当我使用以下过程升级 Indy 时,在启动 IDE 时以及在 TMS 安装后立即出现错误 - 错误是:The procedure entry point @Idhttp@TidCustomHTTP@GetRequestHeaders$qqrv could not be located in the dynamic link library IndyProtocols140.bpl. 显然我这边有一些问题,因为 TMS 确实在没有 Indy 升级的情况下安装干净安装。

因此,如果我用较新版本覆盖 Indy 文件,它可能会正确安装。

这是我现在使用的 Indy 升级的安装过程(在安装 TMS 之前一直有效):

  1. 启动IDE并删除Indy10 Protocols Design TimeIndy10 Core Design Time打包

  2. 运行删除旧 Indy 文件的脚本:

    /li>
  3. 在 "c:\code\indy" 中解压新的 Indy 安装并按顺序打开IndySystem140.dpk, IndyCore140.dpk, IndyProtocols140.dpk, dclIndyCore140.dpk, dclIndyProtocols140.dpk

  4. 修改Generate all C++ Builder files (including package libs)上述每个包的编译选项。

  5. 将所有包设置为Release并按上述顺序构建它们。

  6. 也安装最后两个

  7. 将包含和库路径添加到“c:\code\indy\Core”(对于协议和系统也是如此)

我还弄乱了 Indy 附带的 FullC140.bat 脚本,但没有像上面那样正确安装它。

有没有人成功更新 Indy 并在上面安装了 TMS?

我的批处理脚本是否删除了一些它不应该删除的文件?

0 投票
2 回答
475 浏览

delphi - TIdHTTPServer 在我的 DUnit 测试中激活它时引发 EThread 错误 6

我需要一个本地 HTTP 服务器来进行单元测试。

当我尝试在 处激活 TIdHTTPServer 时SetUp,它会失败并显示 EThread 消息:

“线程错误:描述符无效 (6)”

这就是我初始化它的方式:

也许使用 Indy 的 TIdHTTPServer 和 DUnit 框架有一些限制?

  • 德尔福 2010
  • 印地 10

TIdListenerThread.Run在proc(IdCustomTCPServer 单元)的这一行之后的某处引发了异常

但是,我无法更深入地追踪它,我不知道为什么。

0 投票
0 回答
383 浏览

delphi - 带有 Delphi 2010 的 Indy10 cookie - 未发送 cookie

我在尝试使用 Delphi 2010 和 Indy 10.5.8 发送 cookie 时遇到问题。下面的代码显示了程序

用于执行初始登录和用户身份验证 - 验证序列号,然后是用户登录,然后轮询任何其他登录用户。

第二步,再次登录,查询用户论坛数据库。这是由于没有发送 cookie 而失败的第二步。

请参阅随附的 JPG 以了解发生的情况(“AllPosts”的内容)。该图显示了程序在尝试访问论坛数据库时生成的诊断信息。论坛在我登录时返回 cookie 信息,但 Indy10 Put 命令不会在随后对论坛的调用中将 Cookie 发回。

以下是用于访问论坛的代码的例外情况。前 4 个程序与登录大厅有关,后 2 个程序用于访问论坛。在附件 JPG 中,您可以看到第一次调用 TransmitPost 成功登录论坛并在响应中获取 Cookie。随后调用 TransmitPost 收到响应错误号 46,表示 Cookie 丢失。这两个调用都是从下面的例程 ViewForums 进行的。

在设计时已经设置了一个 cookie 管理器。

如果您对我如何将 cookie 信息插入到论坛的后续调用中以安抚论坛的看门人,我将不胜感激。

诊断消息的图像

0 投票
2 回答
2250 浏览

delphi - Indy TCPClient 和 InputBuffer 中的恶意字节

我正在使用以下几行代码通过 IP 从外部调制解调器/路由器(又名设备)写入和读取。

MsgStr 是一个字符串类型,其中包含我要发送到我的设备的文本。缓冲区被声明为 TIdBytes。我可以确认 IOHandler.InputBufferIsEmpty 在调用 ReadBytes 之前立即返回 True。

我希望收到的前 10 个字节非常具体,因此从我的角度来看,我只对发送字符串后收到的前 10 个字节感兴趣。

我遇到的问题是,在与某些设备交谈时,在建立连接后我第一次发送字符串时返回的第一个字节在我的缓冲区输出中放置了一个流氓(随机)字节。随后的字节是正确的。

例如,我期望的 10 个字节可能是:#6A1EF1090#3但我得到的是.#6A1EF1090。在这个例子中,我有一个不应该有的句号。

如果我尝试再次发送,它工作正常。(即建立连接后发送的第二次写入)。(对我来说)奇怪的是使用 Socket Sniffer 不会显示返回的随机字节。如果我创建自己的“服务器”来接收响应并发送回一些东西,那么它 100% 的时间都可以正常工作。其他软件 - 即不是我的软件 - 与设备通信良好(但我当然不知道他们如何解析数据)。

上面有什么我做错的事情会导致这种情况 - 请记住,它只发生在我在建立连接后第一次使用 Write 时?

谢谢

编辑

我正在使用 Delphi 7 和 Indy 10.5.8

更新

好的。经过大量测试和寻找,我离找到这个解决方案还差得远。我得到两个主要场景。1 - 第一个字节丢失,2 - 在接收数据包的开头“引入”字节。使用 TIdLogEvent 和 TIdLogDebug 都可以适当地显示丢失的字节或初始引入的字节。因此,我上面的 ReadBytes 声明始终如一地显示了 Indy 认为存在的内容(在我看来)。

此外,为了进一步测试,我下载并安装了 ICS 组件。不幸的是(或者幸运的是,取决于你如何看待它)这并没有显示出与 Indy 相同的问题。这没有显示第一个字节丢失,也没有显示开头引入的字节。但是,我只进行了表面测试,但 Indy“几乎立即”产生了这种行为,而 ICS 根本没有产生这种行为。

如果有人感兴趣,我可以提供一个小型演示应用程序来说明问题和我连接的 IP - 这是一个公共 IP,因此任何人都可以访问它。否则现在,我只需要解决它。我不愿意切换到 ICS,因为 ICS 在这种情况下可能工作正常,并且考虑到使用这个套接字的东西几乎是程序的全部关键,必须用 ICS 完全替换 Indy 会很讨厌。

0 投票
1 回答
652 浏览

delphi - Indy - 知道调制解调器何时发送了 RESET [RST] 标志

我注意到当我正在与之交谈的设备发送 RESET 响应时,我收到了一个带有 LastError = 10054 或 10053 的 EIdSocketError。这是有道理的,因为 10054 是 Connection Reset By Peer。

那么有什么我可以在 Indy 中检查以确定是否发生这种情况,而不是将我的代码包装在 try/except 块中并查找 10054 或 10053 错误代码?

我遇到的一种情况是调制解调器在我连接后回复了 RESET 回复(Indy 没有引发异常),所以从我的角度来看,连接成功。然后我尝试写入套接字(即使用 TidTCPClient 发送数据包)并引发 10054 错误。

是否有可能看到这个 RESET 回复?

谢谢

0 投票
3 回答
6435 浏览

delphi - IdFtp.List 偶尔会抛出 socket-error #10054

当我调用函数时

之后我登录并更改了 ftp 目录,我偶尔会收到一个 socket-error #10054 异常(“Connection reset by peer.”)。

当我连续调用该函数例如 20 次时,我得到该异常 1 次。

我只在 Vista OS 上遇到过这个问题。

有谁知道问题是什么或我如何避免它?