2012-08-07 48 views
0

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

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

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?  

回答

0

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

  1. 特定字符顺序
  2. 到每个命令(在样品中的“请求”)的响应有一个已知的固定长度
  3. 每一响应包含嵌入在它的长度在一个固定的偏移量从开始

你将不得不做你自己的缓冲和自己检测每个消息的结束。如果没有对正在使用的协议的详细描述,那就像您所期望的那样具体回答。

0

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