2012-06-13 24 views
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 

這方面的工作。有時候出於某種原因,下一次我在socket上進行的讀操作(發送一個命令並期待一個單行的答案)給了我一些來自這個套接字讀取的垃圾。只是有時候。

我試着這樣做:

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

所以。這讀取我需要的一切。但是,當到達終點給我一個IOException異常:紅色超時

我知道有什麼留給閱讀,所以我怎麼能避免呢?

對不起,我沒有實際的代碼不正確我,但基本上這就是問題所在:越來越具有讀超時異常在這個循環結束:

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

回答

0

我找不到這個問題的一個簡單的解決方案。

我所做的是插入閱讀塊內try/catch塊。所以,當我完成閱讀要點時,我會去讀取直到EOF的try/catch塊。由於沒有EOF,它會引發IOExcpetion(讀取超時)巫婆,忽略它。然後繼續。

我知道這不是最好的解決方案,但現在正在工作。

0

如果有什麼留下來閱讀,同行應該已經關閉了連接。然後你會得到你的空,你可以關閉你的結局。如果對方沒有這樣做,並且超時時間足夠讓你確信沒有更多的數據,超時就是你的證據,你既不能也不想避免。

+0

好的。讓我們暫停,我決定在超時時間結束閱讀。我得到了一個IOException,我怎麼會認爲這個IOException異常是超時? – lcguida

+0

@Rockskull Catch'SocketTimeoutException.' – EJP

+0

我會試試看,但是根據Java Docs,SocketTimeoutException和connect方法一起被拋出。 – lcguida