Java:接收独立于平台的TCP流

时间:2013-06-11 11:14:01

标签: java sockets networking network-protocols

我想构建一个接受完全独立于平台的TCP流的Java服务器,这样客户端就可以用C ++,PHP,ActionScript等任何其他语言编写。

但是,当我想在流中写入不同的原语时,如int,short等。我必须注意正确的整数长度,如果整数是有符号或无符号的。这是一个问题,因为整数字节长度在不同平台上变化很大,例如PHP整数在32位和64位计算机上具有不同的大小。

由于这个原因,仅发送文本而不是整数值可能是合理的,因为如果文本使用相同的字符集和字节顺序,每台机器都以相同的方式解释文本。因此,如果服务器应该读取与平台无关的数据,则它只能使用DataInputStream.readUTF()。

我不确定我的论点是否正确,但如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:1)

虽然您可以发送文本,但不应使用writeUTF / readUTF,因为这是一种特定的格式。即无符号short长度,后跟UTF字符。

可以使用文本的原因是因为您希望一次解析每个字节,您可以使用二进制执行完全相同的操作(并且它通常要快得多)

最大的区别是文本更容易阅读和调试。仅仅因为这个原因,我建议你制作第一个协议文本。当你更有信心调试协议错误时,我只建议做二进制协议。

答案 1 :(得分:1)

甚至DataInputStream.readUTF()也不是通用功能。它使用相当复杂的编码。

查找已拥有大多数流行语言的客户端库的数据格式,例如Thrift Protocol Buffers