2012-01-08 12 views
1

Javaで非ブロッキングTCP接続を達成する最も良い方法は何ですか?私は通常のストリーム(時々SSL)でソケットを使用できるようにしたい。私はAndroid 2.1をターゲットにしなければならないので、最新のものと最大のものを買う余裕はない。Javaで非ブロッキング接続

+1

ブロッキングTCP接続を使用しますが、それを管理するコードを別のスレッドに配置しますか? – aroth

+0

私はこれをやっていますが、ネットワーキングの状況によっては、接続がかなりブロックされることがあります。特にephoneがgsmとumtsの間で切り替えを続けている場合は特にそうです。 –

答えて

2

SocketChannelconfigureBlocking(false)を使用できます。複数のノンブロッキングI/Oチャンネルがあり、それらをすべて1つのスレッドから使​​用する予定がある場合は、Selectorも非常に便利です。

一般的に、ブロッキングソケットを使用してエラーが発生しにくく、複数のスレッドを使用して、I/Oが完了するのをブロックされている間にアプリケーションが有用な作業を継続できることに注意してください。

+0

+1:完全に同意します。ブロッキングモードはデフォルトであり、使用するにはconfigureBlockingを呼び出す必要はありません。 NIOは2002年にJava 1.4で導入され、数年前にAndroidを先行させました。 ;) –

+0

私はNIOの使用について考えましたが、実際にはSSLでうまく動作しません。 –

+0

セレクタにSSLSocketChannelを渡す際に実際に問題があるようです。セレクタを使用する場合は、[この質問](http://stackoverflow.com/questions/867751/ssl-and-socketchannel)を参照してください。残念ながら、最初の回答のリンクが壊れているようです。 –

関連する問題