在java中从套接字读取未格式化数据

在java中从套接字读取未格式化数据,java,Java,我有一个服务器套接字应用程序,它监听特定的ip和端口。然后我有一个客户端套接字,它从服务器读取输入并给出响应。 但我的问题是服务器并没有在末尾提供格式化的行终止字符。所以,当我使用缓冲读取器readline方法时,它会挂起。那么我应该如何读取服务器发送的数据呢。 这里的服务器基本上是一个API(仪表) 下面是服务器和客户端之间的请求/响应序列示例 Request: 8/2/2012 3:28:24 PM.60764 (+0.0000 seconds) 53 0D

我有一个服务器套接字应用程序,它监听特定的ip和端口。然后我有一个客户端套接字,它从服务器读取输入并给出响应。 但我的问题是服务器并没有在末尾提供格式化的行终止字符。所以,当我使用缓冲读取器readline方法时,它会挂起。那么我应该如何读取服务器发送的数据呢。 这里的服务器基本上是一个API(仪表)

下面是服务器和客户端之间的请求/响应序列示例

Request: 8/2/2012 3:28:24 PM.60764 (+0.0000 seconds)
 53 0D                                             S.              
Answer: 8/2/2012 3:28:24 PM.87364 (+0.2656 seconds)
 53 50 31 39 35 30 34 37 38 34 0D                  SP19504784.     
Request: 8/2/2012 3:28:24 PM.92064 (+0.0000 seconds)
 53 48 0D                                          SH.             
Answer: 8/2/2012 3:28:24 PM.02964 (+0.1094 seconds)
 53 48 0D                                          SH.             
Request: 8/2/2012 3:28:24 PM.02964 (+0.0000 seconds)
 53 0D                                             S.              
Answer: 8/2/2012 3:28:24 PM.13964 (+0.1094 seconds)
 53 50 31 39 35 30 34 37 38 34 0D                  SP19504784.     
Request: 8/2/2012 3:28:24 PM.20164 (+0.0000 seconds)
 53 48 0D                                          SH.             
Answer: 8/2/2012 3:28:24 PM.31164 (+0.1094 seconds)
 53 48 0D                                          SH.             
Request: 8/2/2012 3:28:24 PM.31164 (+0.0000 seconds)
 80                                                ?               
Answer: 8/2/2012 3:28:24 PM.46764 (+0.1563 seconds)
 FC                                                ü               
Request: 8/2/2012 3:28:24 PM.46764 (+0.0000 seconds)
 F1                                                ñ               
Answer: 8/2/2012 3:28:25 PM.84264 (+0.3750 seconds)
 8A 31 39 35 30 34 37 38 34 88                     ?19504784?      
Request: 8/2/2012 3:28:25 PM.90464 (+0.0000 seconds)
 F1                                                ñ               
Answer: 8/2/2012 3:28:25 PM.02964 (+0.1250 seconds)
 8A 01 41 32 4D 47 30 31 42 B1                     ?.A2MG01B±      
Request: 8/2/2012 3:28:26 PM.81164 (+0.0000 seconds)
 CA F0 00 00 00 00 00 00 00 3A                     Êð.......:      
Answer: 8/2/2012 3:28:26 PM.02964 (+0.2188 seconds)
 C4 00 05 00 C9 31 36 38 C4 B7 B7 3F 2E C9 74 5A   Ä...É168Ä··?.ÉtZ
 02 00 02 00 FE FC C9 A1 0D 07 00 FB FF FD FC C9   ....þüÉ¡...ûÿýüÉ
 1E 0E FD FF FE FF FD FC C9 B8 FE 4E FF FA 01 FF   ..ýÿþÿýüɸþNÿú.ÿ
 FF B9 D0 F9 F0 3F D0 BF 50 9F                     ÿ¹Ðùð?пP?      

如果服务器不发送行尾,则不能使用
readline()
。但是,原始协议中的某些内容必须指示响应何时完成。这可以是一个或多个

  • 特定字符序列
  • 对每个命令的响应(“示例中的“请求”)都有一个已知的固定长度
  • 每个响应都包含嵌入其中的长度,该长度与起始位置的偏移量是固定的

  • 您必须自己进行缓冲并自己检测每条消息的结尾。如果没有对所使用协议的详细描述,这将是一个非常具体的答案。

    您可以尝试使用BufferedReader的一种读取方法,并自行处理数据中的任何中断。这可能是你最好的控制了