【问题标题】:With Delphi Indy 10.6 and tcpclient is there any way to tell the data format in the input buffer使用 Delphi Indy 10.6 和 tcpclient 有没有办法告诉输入缓冲区中的数据格式
【发布时间】:2017-05-25 08:40:52
【问题描述】:

我正在传输小字节数据包和文件流。有什么方法可以判断传入的数据包实际上是文件流还是对 IOHandler 来说都只是字节?

【问题讨论】:

  • 然后发送数据类型信息。
  • 我知道我在期待什么,但如果事情变得“不同步”,知道等待我的数据类型会非常有帮助。
  • 您的客户应该知道这一点。不能有任何“失控”的行为。如果客户端不知道你的服务器为他们提供的东西,它也应该告诉它。然后客户端将等待直到文件传输完成(例如,通过发送文件传输即将发生,然后是文件大小字节),或者接收字节直到收到一些终止数据包。
  • @Skutch “如果事情变得“不同步”,知道等待我的数据类型将非常有帮助”。如果您使用设计合理的协议,并且正确地发送和读取数据包,那么您将永远不会同步,除非发送方开始发送垃圾,或者存在网络错误。在这种情况下,您通常可以做的就是关闭连接。

标签: delphi tcpclient indy


【解决方案1】:

有什么方法可以判断传入的数据包实际上是文件流还是只是 IOHandler 的字节?

就 IOHandler 而言,它只是原始字节。您有责任在应用程序代码中定义和实现协议,以控制数据包的结构和识别方式。例如,TL​​D(Type-Length-Data)是一种常见的协议习惯用法,其中一个值标识正在发送的数据的类型,后跟一个包含数据长度的值,然后是实际数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 2011-02-01
    • 1970-01-01
    • 2022-01-17
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多