2017-02-17 14 views
0

私はソケットプログラミングの新人です。単純なチャットアプリケーションを作成しようとしています。私のサーバーは文字列のHashSetを利用してユーザー名情報を格納しています。HashSetサーバーからクライアントに送信されます。以前は普通のソケットよりもObjectOutputStreamObjectInputStreamでこれを行うことができました。しかし、今私はSocketChannelを使用していますが、これは私が次の例外を取得することはできません:Java NIO非ブロック化SocketChannelsの書き込みと読み取り

java.nio.channels.IllegalBlockingModeException 

ので、私はこれを行う方法でウェブを検索し、誰もが何か別のことを言うと、ほとんどが私の頭の上の道を行きます。 writeObjectreadObjectメソッドを完全にオーバーライドしないと、これを行う簡単な方法はありますか?

ありがとうございます。

+0

それは可能です:それはまた難しいです。ブロッキングモードに固執する。 – EJP

+0

@EJP Lolありがとう、私はNetwork Programmingクラスの一部としてnon-blockingでこれを行う必要があります。 – mks

答えて

1

ノンブロッキングモードを使用しないか、シリアル化を使用しないことをお勧めします。

あなたがしなければならない場合は、ByteArrayOutputStreamにシリアル化し、長さを送り、長さを送り、長さを受信し、長さを受け取り、データを蓄積し、正しい長さのデータを得るまでByteArrayInputStreamとし、それから逆シリアル化します。容易ではない、特に手を振って「読書し続ける」。そしてそれは時間と空間の両方を無駄にする。

+0

ありがとうございました、誰にもこれのどこかに書かれた一般的なテンプレートはありませんか?これは共通の問題だと思います。 – mks

+0

これまでに質問がありました。 – EJP

+0

私はこれを処理するためにJavaのジェネリックスを採用している何らかの種類のクラスまたはメソッドを意味します。 – mks

関連する問題