Javaソケット:オブジェクトと文字列の読み書き方法

クライアントができるクライアント/サーバープログラムを作成しようとしています:   *サーバーに文字列を書き込む   *サーバーからオブジェクトを受け取る

サーバーは次のことができます。   *クライアントから文字列を受け取る   *クライアントにオブジェクトを送信します。

しかし、これまでの私の試みは無駄であることが証明され、私はかなり不満を抱いています。私は根本的な欠陥を作っていると確信していますが、ソケットプログラミングには新しいので、どこに間違っているのか分かりません。

ストリームの私の選択に何か間違っている、または私が拾っていないストリームを使用するより良い方法はありますか?

サーバーがreadUTF()でハングすると、オブジェクトは決して書き込み/読み取りされませんが、送信しているオブジェクトはシリアル化されます。

助けをありがとうございました。

//Used to receive a string input from client side
DataInputStream input = new DataInputStream(clientSocket.getInputStream());
// Used to output an object to client side
ObjectOutputStream oo = new ObjectOutputStream(clientSocket.getOutputStream());

// This is never executed..
clientInput = input.readUTF();
oo.writeObject(book);

クライアントサイドコード:

       //Used to read object from server side
        input = new ObjectInputStream(clientSocket.getInputStream());
       //Used to read input from command line
        keyboard = new BufferedReader(new InputStreamReader(System.in));
       //Used to send string to server
        output = new DataOutputStream(clientSocket.getOutputStream());

        cmdInput = keyboard.readLine();
       //Write to server, this executes at runtime.
        output.writeUTF(cmdInput);                              
       //Object is never sent, this line is not executed.
        book = (Book)input.readObject();
3
はい私はServerSocketをクライアントに使用しています。私は文字列を単純に渡すことができたので、クライアントサーバー接続は正常に動作しています。それが破損し始めたオブジェクト機能を追加したときです。
追加された 著者 BodhiByte,
ObjectInputStreamとObjectOutputStreamを使用しているので、私はあなたがTCPを使いたいと思っています。サーバーとクライアントの両方でclientSocketを作成する場所にコードを含めることはできますか?あなたは、サーバ用のServerSocketクラスを使用しています。
追加された 著者 aleph_null,
しかし、あなたのクライアントコードは、あなたがwriteObjectを呼び出す前に取り残されています ...
追加された 著者 aleph_null,

1 答え

一般的に、これを自分で行うよりも、Webサービスキット(Apache CXFなど)を使用する方がよいでしょう。

具体的には、クライアントの出力ストリームで flush()を呼び出してみてください。

0
追加された
私はクライアントでフラッシュ呼び出しを試みたが、それは変更されませんでした。また、この問題のためにはJDKライブラリ内でしか開発できません。
追加された 著者 BodhiByte,
Java 1.6では、JDKに完全なWebサービスキットがあります。
追加された 著者 bmargulies,