独立于平台套接字通信的协议

Protocol for platform independent socket communication

本文关键字:套接字 通信 协议 平台 于平台 独立      更新时间:2023-10-16

我试图理解与平台无关的套接字通信是如何工作的,因为我想在Java服务器和一些本机Unix和Windows客户端之间共享套接字数据。套接字在设计上是平台独立的,但是数据表示是与机器相关的,因此如果TCP数据抽象真实的数据格式是有利的,因为在一个系统上支持的数据格式不一定在另一个系统上支持。

例如,如果我想从c++客户端程序向Java服务器发送一个无符号int值,我必须告诉服务器这个数字应该被解释为一个负整数。这种抽象是如何工作的呢?以我有限的知识,我只会发送一个数字作为文本,然后附加一些独特的字符序列,告诉接收者他收到了什么类型的数据,但我不知道这是否是一个可行的方法。

更具体一点:我想发送包含以下内容的消息:

  1. 消息开头的某种短信号或命令以便接收方确切地知道如何处理接下来的数据。
  2. 然后是任意长度的文本内容。
  3. 后面跟着一个数字,也可以是文本,但必须是分别解释。
  4. 在结尾可能是告诉服务器消息结束的标记这里。

TCP以字节块的形式处理数据。这是否意味着当我在一个字节中编写一个UTF-8编码的字符时,如果客户端机器考虑到Java的大端字节顺序,那么这个字符在不同的机器上以相同的方式解释?

套接字是独立的,但不是以(类型长度,字节顺序,字符串编码,…)传输的数据

如果你想用跨语言和跨平台的功能发送二进制数据,看看Thrift, Protobuf或Avro