通过Java套接字发送的消息的复杂性

时间:2019-05-13 20:59:04

标签: java sockets message

基于通过Java套接字传输的消息,我遇到了一个奇怪的问题。

想象一下,您有一个提供套接字监听器的Java应用程序。此应用程序根据以下结构生成消息(字符串):

message + postfix + linebreak

其中

message is a default string,
postfix is a string, which will be added to the message,
linebreak is a user defined line delimiter (e.g. \r\n or \n).

这些字符串在一秒钟内多次连接并通过此套接字提供。

现在,我通过客户端连接到此侦听器(例如,腻子)并使用这些消息。在两台不同的机器上(Linux,Java 8),我可以观察到两种不同的行为:

在第一台机器上,它运行完美;在第二个我看到一个奇怪的行为。似乎每行的行定界符在后缀之前发送,并且后缀将覆盖下一条消息的前x个字母。

为了更好地理解,这是一个示例:

基于消息“ abcde”,后缀“ fg”和行定界符“ \ r \ n”,我希望每行都这样:

"abcde"+"fg"+"\r\n" => "abcdefg\r\n"

客户端的输出(例如腻子)应为:

"abdefg"
"abdefg"
"abdefg"
and so on ...

每行后都有换行符。在第一台机器上,它运行完美。

但是在第二台机器上,我通过腻子收到以下消息:

"abcde"
"fgcde"
"fgcde"
and so on ...

看来,行定界符是在后缀之前发送的,后缀会覆盖下一行的开头。

我不知道,这是怎么回事。有人有解释吗?两台计算机上的软件,java版本和操作系统相同。

非常感谢

亚历克斯

0 个答案:

没有答案