平台无关套接字通信的协议

时间:2013-06-12 15:35:16

标签: java c++ sockets networking tcp

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

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

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

  1. 在消息开头有某种短信号或命令 以便接收者确切地知道如何处理随后的数据。
  2. 然后是一些任意长度的文本内容。
  3. 后跟一个数字,也可以是文本,但应该是 单独解释。
  4. 最后可能是一个告诉服务器消息结束的标记 这里。
  5. TCP以字节块的形式处理数据。这是否意味着当我在一个字节中写入UTF-8编码的字符时,如果客户端计算机将Java的大端字节顺序考虑在内,则在不同的机器上以相同的方式解释此字符?感谢您的任何意见和帮助。

1 个答案:

答案 0 :(得分:0)

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

如果要发送具有跨语言和跨平台功能的二进制数据,请查看ThriftProtobufAvro