问题标签 [indy]

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 投票
5 回答
1793 浏览

delphi - 为什么我的 D2009 exe 会生成带有名为 ATTnnnnn.DAT 附件的电子邮件

当在 D2007 中编译的相同源代码生成带有正确命名为原始文件名的附件的电子邮件时,为什么我的 D2009 exe 会生成带有名为 ATTnnnnn.DAT 的附件的电子邮件?

我正在使用 D2007 和 D2009 附带的相应 Indy 库。附件中没有原始文件名会阻止用户双击附件打开它(通常附件是 Excel 电子表格)。

注意:代码是相同的——只是编译器和 Indy 库有所不同。D2009 exe发送的附件可以保存并重命名为zzzz.xls,然后正确打开-即电子邮件和附件正确通过-只是电子邮件附件文件名混乱。

有人建议附件标题已损坏。印地被破坏了吗?要复制的代码是可以在许多网站上找到的标准代码,但如果需要,我可以发布。提前谢谢。

0 投票
3 回答
1172 浏览

delphi - 为什么 Indy 10 无法初始化?

我有一个 Delphi 2009 项目的问题:它无法初始化 Indy 10!这段代码在 Delphi 2007 之前运行良好(尽管我们可能一直在使用旧版本的 Indy,但我怀疑这与它没有太大关系);

对 IdWinsock2.InitializeWinSock() 的初始调用引发了此异常(错误代码为 998):

但是 ws2_32.dll 位于 C:\Windows\System32 中,并带有以下版本详细信息:

(这表明我在 WinXP 顺便说一句)。

愚蠢的是,当我查看进程本身时(使用“进程资源管理器”),我可以看到进程已经打开了这个 DLL。“WS2_32.DLL”已经加载的原因,似乎是因为我们在这个项目中也使用了RTL单元Winsock.pas。这个单元静态链接到“wsock32.dll”,它依赖于WS2_32.DLL,所以在那里。

有谁知道为什么这段代码之前(在 Delphi 2007 中)运行良好,而现在(在 Delphi 2009 中)它突然中断了?

而且这个是无法重新打开ws2_32 dll常识,还是这里真的有什么问题?(我确实检查过:我的系统上只有这些 DLL 的 1 个版本)。

更好的是:谁能帮我解决这个问题?

0 投票
3 回答
2031 浏览

delphi - 更新 Delphi 2009 默认安装的 Indy 10 的正确方法是什么?

由于 Indy 现在已内置到 Delphi 2009 的安装过程中......是否有适当的方法来“删除”它,以便可以从 SVN 存储库升级到最新版本?据我所知,没有自动删除它的选项。

0 投票
5 回答
3071 浏览

delphi - 为什么 Indy 9 包含在 Delphi 2009 中?使用安全吗?

为什么会有 Indy9 文件夹(C:\Program Files\CodeGear\RAD Studio\6.0\source\Indy 的默认安装文件夹包含“Indy9”和“Indy10”的子目录) 为什么两个版本都安装了?什么在使用 Indy9?我不认为它已经在 2009 年更新了……Indy9 现在可以安全地与 Delphi 2009 一起使用吗?

0 投票
8 回答
3726 浏览

delphi - 支持 UTF-8 或 Unicode 的 Delphi SMTP 组件

Delphi 2009 附带的 Indy 10 SMTP 组件似乎不能正确支持主题和正文中的 unicode

有谁知道一个好的替代方案,或者是否有人对 Indy10 进行了必要的更改来解决这个问题?

0 投票
2 回答
19674 浏览

delphi - Delphi 2009,Indy 10,TIdTCPServer.OnExecute,如何抓取InputBuffer中的所有字节

我正在搞乱 Delphi 2009 提供的 Indy 10,并且在 OnExecute 触发时无法从 IOHandler 获取所有数据......

AContext.Connection.IOHandler.InputBuffer.Size 似乎不可靠并且经常返回 0,但在下一次通过 OnExecute 运行时,它会获取正确的字节数,但为时已晚。

本质上,我希望能够抓取所有数据,将其填充到 UTF8String(不是Unicode 字符串)中,然后解析特殊标记。所以我没有标题,消息是可变长度的。似乎 Indy 10 IOHandlers 没有为此设置,或者我只是使用错误。

做一些事情会很好,比如传递一个特定大小的缓冲区,尽可能多地填充它并返回实际填充的字节数,然后如果还有更多则继续。

顺便说一句 TIdSchedulerOfFiber 的状态如何,这看起来很有趣,它有效吗?有人在用吗?我注意到它不在 Delphi 2009 的标准安装中。

更新:我发现 Msg := AContext.Connection.IOHandler.ReadLn(#0, enUTF8); 哪个可行,但我仍然想知道上述问题的答案,是因为它是基于阻塞IO的吗?这使得 TIdSchedulerOfFiber 更加热衷。

0 投票
2 回答
11409 浏览

multithreading - Indy 10 IdTCPClient 使用单独的线程读取数据?

问题:我正在寻找的是在 Indy 10 中使用 IdTCPClient 使用单独线程接收数据的最典型或最佳实践方式。

背景:为了清楚起见,下面的代码是我尝试删除的实际数据处理部分的示例。线程的想法是接收所有数据(带有声明其余消息长度的标头的可变大小)然后解析它(这就是 HandleData 过程所做的)并根据命令触发事件处理程序。

TIdIOHandlerSocket 由主应用程序传递给线程,主应用程序也会在需要时将数据写入套接字。

作为前缀,我使用了另一个处理 Indy 的服务器组件的 StackOverflow 问题:“ Delphi 2009, Indy 10, TIdTCPServer.OnExecute, how to grab all the bytes in the InputBuffer ” 来获得我目前所拥有的基础.

谢谢你的帮助!

0 投票
3 回答
2649 浏览

delphi - 使用 Indy 测量网络流量

我正在使用 TIdTCPCmdServer 来处理与客户端应用程序的所有通信。我希望我的服务器记录所有类型的东西,包括网络流量。有什么简单或聪明的方法可以查看 TCPCmdServer 实际接收和发送了多少字节?我只能想到像这样的代码

这在我看来是非常难看的,因为这些流量更新会分布在我的代码中,而且也相当复杂。

有什么建议么?

谢谢你的帮助。

0 投票
2 回答
1016 浏览

multithreading - 如何更改侦听器线程优先级

我使用 Indy 10 的 TIdCmdTCPServer 组件来实现我的客户端-服务器应用程序。问题是来自客户端的请求可能相当复杂,而且我的服务器应用程序的 GUI 部分会立即失去响应能力。从Indy Documentation,我得到了那个 Indy:

使用线程优先级 tpHighest 为绑定创建和启动侦听器线程。

我可以改变这种行为吗?

0 投票
3 回答
15797 浏览

delphi - Indy 写缓冲 / 高效 TCP 通信

我知道,我问了很多问题……但作为一个新的 delphi 开发人员,我一直在思考所有这些问题 :)

这个处理使用 indy 10 的 TCP 通信。为了提高通信效率,我将客户端操作请求编码为单个字节(在大多数情况下,当然后面是其他数据字节,但在这种情况下只有一个单个字节)。问题是

不会立即发送该字节(至少不调用服务器执行处理程序)。例如,如果我将“1”更改为“9”,一切正常。我假设 Indy 缓冲传出字节并尝试禁用写缓冲

但它没有帮助。如何发送单个字节并确保立即发送?而且 - 我在这里添加另一个小问题 - 使用 indy 发送整数的最佳方式是什么?不幸的是,我在 TIdTCPServer 的 IOHandler 中找不到像 WriteInteger 这样的函数......和

对我来说似乎不是很有效率。我是连续使用多个写命令还是将内容打包在一个字节数组中并发送一次,这有什么不同吗?

感谢您的任何回答!

编辑:我添加了一个提示,我正在使用 Indy 10,因为关于读写过程似乎有重大变化。