0

我有一个代码,我需要从设备中捕获一些信息。本设备有插座连接。基本上是这样的:

我发送一个命令并返回:

<some info>
<some info>
<some info>
<some info>

1.551
1.689
... (A bunch of those numbers)
1.258

<more info>

我需要一部分,但对我来说是垃圾。

第一次尝试是:

read <somne info>
reached empty line?
start getting the points
reached the points total amount?
break the loop

这种工作。有时出于某种原因,我在套接字上进行的下一次读取(发送命令并期待单行答案)会给我这个套接字读取带来的一些垃圾。只是有时。

我试图这样做:

read <somne info>
reached empty line?
while !EOF
    is number?
    read
end

所以。这阅读了我需要的一切。但是当到达终点时给了我一个 IOException: red timeout

我知道没有什么可以阅读的了,那我怎么能避免呢?

抱歉,我没有正确的实际代码,但基本上这就是问题所在:在此循环结束时出现读取超时异常:

while((line = readLine()) != null){
      //read stuff
}
4

2 回答 2

0

如果没有任何内容可供读取,则对等方应该已关闭连接。然后你会得到你的空值,你可以结束你的结局。如果对等方没有这样做,并且超时时间足够长,您可以确信没有更多数据,那么超时就是您的证据,您既不能也不想避免它。

于 2012-06-13T21:31:51.580 回答
0

我找不到解决这个问题的简单方法。

我所做的是在读取块中插入一个 try/catch 块。所以,当我读完这些点时,我会转到读取到 EOF 的 try/catch 块。由于没有EOF,它会抛出一个IOExcpetion(读取超时)女巫我catchch,忽略它。继续。

我知道这不是最好的解决方案,但现在正在工作。

于 2012-07-23T13:15:07.240 回答