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

こういう作品。何らかの理由で、ソケットで次に行う読み取り (コマンドを送信し、1 行の応答を期待する) で、このソケットの読み取りからゴミが得られることがあります。たまにだけ。

私はこれをやろうとしました:

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

この問題の簡単な解決策が見つかりませんでした。

私がしたことは、読み取りブロック内に try/catch ブロックを挿入することでした。そのため、ポイントの読み取りが終了したら、EOF まで読み取る try/catch ブロックに移動します。EOF がないため、IOExcpetion (読み取りタイムアウト) ウィッチがスローされ、無視されました。そして続けてください。

私はそれが最善の解決策ではないことを知っていますが、現在機能しているものです。

于 2012-07-23T13:15:07.240 に答える
0

読み取るものが残っていない場合、ピアは接続を閉じているはずです。次に、ヌルを取得し、最後を閉じることができます。ピアがそれを行っておらず、タイムアウトが十分に長く、これ以上データがないと確信できる場合、タイムアウトはその証拠であり、回避することはできませんし、回避したくもありません。

于 2012-06-13T21:31:51.580 に答える