套接字总是最终超时

时间:2012-06-13 21:25:12

标签: java sockets exception timeout

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

我发送一个命令,让它返回:

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

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

<more info>

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

Fisrt Attempt是:

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:红色超时

我知道没有什么可以阅读的,所以我怎么能避免这种情况呢?

对不起,我没有实际的代码,没有我,但基本上这是问题:在这个循环结束时获得读取超时的异常:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

我所做的是在读取块中插入try / catch块。所以,当我读完这些点时,我会去那个读取/捕捉块,直到EOF。由于没有EOF,它会抛出一个IOExcpetion(Read Timeout),我会忽略它。然后继续

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