2011-02-10 31 views
0

Javaで標準のマルチクライアント/サーバプログラムを作成しています。サーバーは接続を受け入れ、それぞれを処理する新しいスレッドを生成します。また、クライアントは、サーバーからのメッセージを待機するスレッドを生成します。クライアントとサーバーは、MessageInputStreamとObjectOutputStreamを介してMessageオブジェクトを渡すことによって通信します。Javaクライアント/サーバがソケット経由でオブジェクトを送信する問題

初期のハンドシェイクは正常に機能します。クライアントが起動すると、サーバーへのソケット接続が開始されます。サーバーはソケットを受け取り、接続に成功したことを示すメッセージをクライアントに送信します。クライアントはそのユーザ名を送り返し、クライアントとサーバの両方がメッセージを待つことになります。

私はチャットメッセージを作成してサーバーに送信するテキストをクライアントから送信します。サーバーはこのメッセージを受信し、接続されているすべてのクライアントに送信しようとします(1つしかありません)。問題は、このメッセージが決してクライアントに戻らないということです。

// This is Message.send 
public void send(ObjectOutputStream stream) throws IOException{ 
     stream.writeObject(this); 
} 

// ClientThread.run 
public void run(){ 
    try { 
     out = client.getOutputStream(); 
     out.flush(); 
     ObjectInputStream in = client.getInputStream(); 

     Message msg = null; 
     int len; 
     byte[] bytes = null; 
     int i = 0; 

     // Continuously read new Messages from the server 
     while(true){ 
      msg = (Message)in.readObject(); 

      processInput(msg); 
     } 
    } catch (Exception e) { 
     Util.showError(e.getMessage(), "Connection Error"); 
    } 

    System.out.println("Client exited"); 
} 

// ServerThread.run 
public void run() { 
    try { 
     out = new ObjectOutputStream(client.getOutputStream()); 

     ObjectInputStream in = new ObjectInputStream(client.getInputStream()); 

     Message msg = null; 

     while(client.isConnected()){ 
      msg = (Message)in.readObject(); 
      processInput(msg); 
     } 

     in.close(); 
     client.close(); 
    } catch (Exception e) { 
     server.addMessage(e.getMessage()); 
    } 
} 
+0

Um、これをスローする代わりにSOAPまたはRESTを使用することを検討してください。 – bmargulies

+0

これは練習ですので、既存のプロトコルを使用せずに、より低いレベルのソケットで練習することができます。 – Jared

答えて

0

私は、データが点Aから点Bまでそれを作ることはありません可能性があるなしflush()への呼び出しを、表示されません。

ByteArrayOutputStreamの上にあるObjectOutputStreamを使用して、結果のバイト配列をワイヤに押し込み、もう一方の端でプロセスを反転することをお勧めします。

+0

send()でwriteObject呼び出しの後にflush()を追加し、各ObjectOutputStreamをインスタンス化した後にflush()を追加しました。いいえ運はない。 – Jared

関連する問題