2012-03-21 12 views
2

現在、オブジェクトストリームの最後のオブジェクトは、サーバーから別のデータセットが送信されるまで受信されません。送信されたオブジェクトには1,2または3のいずれかのintがあり、それらが最初の中間パケットであるか最後のパケットであるかを示します。私はこれらのオブジェクトを配列に送り、これをデバッガで解析したところ、最初のパケットが再び送られるまで最後のパケットが到着しないことが示されます。ストリームから最終データを受信して​​いません

これは、サーバーのコードです:

public void telleveryone(Object message){ 
    Iterator it = clientOutputStream.iterator(); 
    while(it.hasNext()){ 
     try{ 

      ObjectOutputStream everyone = (ObjectOutputStream)it.next(); 
      everyone.writeObject(message); 
      everyone.flush(); 

     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 

} 

これは、クライアント上の受信コードです:

public void run() { 

    try{ 
     sock = new Socket("10.42.34.46", 1337); 

     InputStream is = sock.getInputStream(); 

     ois = new ObjectInputStream(new BufferedInputStream(is)); 

     OutputStream os = sock.getOutputStream(); 

     oops = new ObjectOutputStream(os); 

     while(true){ 

       serverDraw = (com.DrawTastic.Drawring) ois.readObject(); 

       test.add(serverDraw); 

     } 


    }catch(IOException ex){ 
     ex.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


} 
+0

多分、フラッシュがあなたのジャムです。 – duffymo

答えて

2

あなたはheaderをフラッシュする必要があります。

発信者がしたいことストリームを即座にフラッシュして、 ObjectInputStreamを受け取るコンストラクタがwをブロックしないようにします。ヘッダ

oops = new ObjectOutputStream(os); 
oops.flush(); 
0

を読んだ鶏 私は徹底的にコードの上に読んでいないが、私は、Pythonでこの問題に遭遇しました。私のプログラムがサーバーに再度pingを実行するまで、サーバーに対する多くのコマンドが実行されていないことに気がつきました。私の解決策は、サーバーへの各コマンドの最後に改行があることを確認するか、バッファをフラッシュすることでした。

関連する問題