基于通过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版本和操作系统相同。
非常感谢
亚历克斯