【问题标题】:Sending binary data with Indy through TCP\IP, how?通过 TCP\IP 使用 Indy 发送二进制数据,如何?
【发布时间】:2010-06-02 08:52:24
【问题描述】:

如何使用 Indy 组件发送二进制数据?其中哪一个最适合这项任务?我尝试使用TIdTcpClient,但它只允许发送字符串。

我已经找到了一个解决该问题的方法here,但我不明白。 它说的是方法Write(TIdBytes),但我并不清楚答案。他的意思是写到TIdBytes 的某个实例,以及如何将该实例与TIdTcpClient 连接起来?

感谢您的帮助。

【问题讨论】:

    标签: delphi tcp indy tcpclient


    【解决方案1】:

    您引用的页面不能很好地重现这些消息。这是雷米真正写的:

    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

    【讨论】:

    • 谢谢 Rob,该页面的格式让我感到困惑。感谢您的帮助。
    【解决方案2】:

    Write 是 TCPClient 的一种方法(或在 Delphi 中调用的任何方法)。这是您想要做的工作代码:http://delphi.about.com/od/internetintranet/l/aa012004a.htm。应该让您立即启动并运行:)

    【讨论】:

    • 实际上,这不是工作代码。至少对于 Indy 10 来说不是。Write 不再是TIdTCPClient 的方法。
    • 谢谢 Mike,问题是我的 Indy 版本中没有 TIdTcpClient 的这种方法……Indy 的文档也没有说明这些方法……我相信那个例子你给的太旧了,不是最新的。
    • 我并不是说您可以复制和粘贴代码,但我个人发现编写自己的代码非常有帮助(C++ Builder 2009)。哦,好吧。
    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 2014-01-08
    • 2016-04-06
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    相关资源
    最近更新 更多