【问题标题】:Standard bytes communication protocol for data transfer用于数据传输的标准字节通信协议
【发布时间】:2016-01-10 18:16:12
【问题描述】:

我有两个程序通过 TCP/IP 通过交换命令和数据相互通信(连接已经成功)。我正在寻找一种协议,通过它我可以交换命令(ASCII)和二进制数据(float、double、int、char、wchar_t 等...)。

是否有一些我可以使用的标准?还是我应该发明自己的交换协议?

程序是用 C++ 和 Qt 编写的。

【问题讨论】:

  • @user1929959 对不起,这不是我的问题。我在询问一种在交换字节时在客户端和服务器之间正确解释数据的方法。

标签: c++ qt tcp protocols network-protocols


【解决方案1】:

如果您使用 Qt,请查看 QDataStream http://doc.qt.io/qt-4.8/qdatastream.html

示例:http://doc.qt.io/qt-4.8/qt4-network.html

【讨论】:

  • 感谢您的回复。 QDataStream 在不固定类型的情况下盲目传输字节。我的问题是,客户端如何知道服务器发送的数据类型。有没有已知的协议?
  • @SamerAfach 你真的需要发送类型吗?例如,如果您发送了一些命令,您就知道它的参数,并且您可以直接读取这些类型。你能稍微调整一下你的需求吗?
  • 我可能需要通过这个连接发送一个或一个整数、双精度、字符串或任何东西的数组。另一方必须接收信息并正确解释并存储它并将其用于绘图或任何其他任务。
  • 你可以尝试使用QVariant qt-project.org/doc/qt-4.8/qvariant.html 可以写到QDataStream
  • 我理解你。这种类型的交换JSON、BSON等有很多协议,看这里en.wikipedia.org/wiki/Comparison_of_data_serialization_formats
【解决方案2】:

我建议使用 header+data 来描述这类消息。 在标题中你可以有例如一个消息类型字段,根据它的值你可以转换数据的内容。 我认为实现起来并不复杂。 当你有这个时,你可以通过任何你想要的交换这样的结构(例如 QDataStream)

【讨论】:

    【解决方案3】:

    如果您使用 Qt,this 可能会有所帮助。

    一般来说,您应该选择一种逐字节的格式,然后在套接字的每一侧进行序列化和反序列化。否则,您最终会遇到操作系统(通常是 32 位与 64 位系统)之间字节顺序或大小不同的问题。

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 1970-01-01
      • 2017-01-28
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      相关资源
      最近更新 更多