dポイントプレゼントキャンペーン実施中!

JavaのSocketを使い、チャットシステムを作っています。
2ちゃんねるの掲示板やニコニコ動画のコメントの真似のようなものです。
一つのサーバーに、複数のクライアントがアクセスしてコメントを書いていくというものです。

しかしオブジェクトの送受信で困ったことになりました。

//読み込み
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
ObjectInputStream ois = new ObjectInputStream(bis);

//書き込み
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(bos);

こうするとBufferedOutputStreamの実体化でプログラムがフリーズしてしまいます。
oisで一度なにかを読み込んだあとに実体化すればできるのですが、
マルチスレッドプログラミングを使うため、
接続があった瞬間に両方実体化しなくてはいけません。
socketからStreamを手に入れることが、一度入出力をするまで片方しかできないようです。

socketのcloneを実体化することも考えたのですが、サーバー側は
serverSocket.accept()を使うためかうまくできません。
どうすればいいのでしょうか。

デバッガの領域からはずれた部分(接続、送受信等)のバグ探しで非常に滅入っています。
助けてください。お願いします。

A 回答 (1件)

そもそもシリアライズしてオブジェクトをそのまま送信するのではなく、


電文を設計して送受信した方が素直じゃないかしら?

この回答への補足

回答ありがとうございます。
初心者ですいません

ObjectOutputStreamでは自分で定義したクラスは送れず、
Javaで定義されたObject(ArraylistやStringやJButton)だけ送れました。
シリアライズ(直列化)とはそういうことなのでしょうか??
参考になるページを教えてもらえると、とても助かります。

・・・なぜかはわからないのですが、下のやり方で書いたら同時に実体化できました。
変なことを聞いてしまったみたいですいません。

//読み込み
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

//書き込み
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());

補足日時:2010/05/20 14:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!