【发布时间】:2010-06-02 08:52:24
【问题描述】:
如何使用 Indy 组件发送二进制数据?其中哪一个最适合这项任务?我尝试使用TIdTcpClient,但它只允许发送字符串。
我已经找到了一个解决该问题的方法here,但我不明白。
它说的是方法Write(TIdBytes),但我并不清楚答案。他的意思是写到TIdBytes 的某个实例,以及如何将该实例与TIdTcpClient 连接起来?
感谢您的帮助。
【问题讨论】:
如何使用 Indy 组件发送二进制数据?其中哪一个最适合这项任务?我尝试使用TIdTcpClient,但它只允许发送字符串。
我已经找到了一个解决该问题的方法here,但我不明白。
它说的是方法Write(TIdBytes),但我并不清楚答案。他的意思是写到TIdBytes 的某个实例,以及如何将该实例与TIdTcpClient 连接起来?
感谢您的帮助。
【问题讨论】:
您引用的页面不能很好地重现这些消息。这是雷米真正写的:
SendCmd() 仅用于文本命令/参数。你将会拥有 在 SendCmd() 退出后发送二进制数据,服务器必须 将响应发送回客户端后读取二进制数据。为了 示例:
--- 客户---
begin IdTCPClient1.SendCmd('DoIt', 200); // send binary data, such as with Write(TStream) or Write(TIdBytes)... end;
他所说的Write 方法是TIdIOHandler 类的成员。您的TIdTCPConnection 对象在其IOHandler 属性中具有该类的一个实例,而这正是SendCmd 函数用来发送其字符串的原因。
符号Write(TIdBytes) 表示使用Write 方法,该方法接受TIdBytes 参数作为其输入。
如果二进制数据已经在流或动态字节数组中,则可以将其中之一直接传递给Write 方法。如果您提供文件名,还有WriteFile 方法将发送整个外部文件。如果您使用流版本,那么您可以选择自动包含流的长度。
如果您的数据尚未包含在其中一种结构中,那么您可以使用接受各种大小整数类型的Write 方法逐个写入数据,或者您可以将数据复制到TMemoryStream然后将其传递给Write。
【讨论】:
Write 是 TCPClient 的一种方法(或在 Delphi 中调用的任何方法)。这是您想要做的工作代码:http://delphi.about.com/od/internetintranet/l/aa012004a.htm。应该让您立即启动并运行:)
【讨论】:
Write 不再是TIdTCPClient 的方法。