2011-07-04 15 views
0

私は、サーバー側のソケットが接続を切断したかどうかを確認する必要があるシナリオを持っています。このために、if(in.read()== - 1)サーバー側が接続を閉じたことを意味します。 しかし、それがブロックされていない場合は、call.iをブロックするときにブロックされていなければ、perticular時間に非ブロックを読み取るか、サーバー側が接続を終了した場合に読み取りをキャンセルできるような解決策が必要です。 私は任意の助けをいただければ幸いですInputStream Non Blocking読み取り操作

socket = new Socket(); 
       // if server is not available 3 seconds blocking call other wise Exception 
       socket.connect(new InetSocketAddress(serverAddress , serverPort),3000); 

のように作成しています。

よろしく、 アーミル

+0

サーバーへの接続をどのように開いているか分からなければ、何をしようとしているのかわからないので、コードを投稿してください。すなわち 'HttpClient'、' URLConnection'、生ソケットなどを使用していますか? –

答えて

0

あなたがmyClientSocket.isClosed()を使用してみましたが、これはTCPのためであると仮定すると?

+0

それはいつも私を間違って返す。 –

+0

これは解決策ではありません。ピアが接続を終了したかどうかはわかりません。あなたが接続を閉じたかどうかをあなたに伝えます。 – EJP

+0

はいEJPは正しいです。私はserver.soを制御できません。強制的にサーバーを閉じることはできません。 –

2

しかし、問題がある場合は、 ブロックがコールをブロックしています。

これは唯一の問題ではありません。より大きな問題があります。データが到着すると、1バイトのデータが捨てられます。あなたは確かにそれをすることはできません。

タイムリーな読書が必要です。 Socket.setSoTimeout()を参照してください。

+0

私は十分にこの答えをupvoteすることはできません。 'setSoTimeout()'はとても隠れています:/ – Graeme

関連する問題