2012-05-11 17 views
0

私は、サーバからクライアントにメッセージを送信したいといくつかの問題が見つかりました:out.flush(によって送信された場合メソッドの問題out.write();

  • を)。方法、クライアントはそれを読むことができますが、私は方法out.write();を使用する場合
  • は、クライアントが(データを受信して​​いない)-1のステータスを受信

クライアントはとメッセージを受信できるように、私は何を追加する必要があります

:私はこれを使用

int totalBytesRcvd = 0; // Total bytes received 
    int bytesRcvd; // Bytes received in last read 
    byte[] byteBufferreceive = new byte[256]; 
    while (totalBytesRcvd < byteBufferreceive.length) { 
     if ((bytesRcvd = in.read(byteBufferreceive, totalBytesRcvd, 
    byteBufferreceive.length - totalBytesRcvd)) == -1) 
     { 
     Toast.makeText(this, "byte lenght: "+bytesRcvd, Toast.LENGTH_SHORT).show(); 
     Toast.makeText(this, "communication error", Toast.LENGTH_LONG).show(); 
     } 
     totalBytesRcvd += bytesRcvd;    
    } 
    System.out.println("The length of the received data "+totalBytesRcvd); 
    String receive; 
    receive = new String(byteBufferreceive); 
    Toast.makeText(this, receive, Toast.LENGTH_LONG).show(); 

クライアント側で:nmbr 2.次のメソッドは、私は、サーバーからメッセージを受信するために、クライアント側で使用する方法であり、私はこれを使用するサーバー側で

DataInputStream in = new DataInputStream(clientsock.getInputStream()); DataOutputStream out = new DataOutputStream(clientsock.getOutputStream()); 

:全体に行を送信するために)(

out = new PrintWriter(socket.getOutpustStream(),true) 

、その後out.printlnを使用します。

 in = new BufferedReader(
       new InputStreamReader(socket.getInputStream())); 

     out = new PrintWriter(
       new OutputStreamWriter(socket.getOutputStream())); 
+1

種類を自動洗浄を可能にし、次の「のprintln、printf関数、またはフォーマット」プラスコンストラクタのいずれかを使用する必要がフラッシュを使用する必要がありますする必要はいけない場合あなたは入出力に使用していますか? –

+0

@skaffman私は上に追加しました – user1388581

+0

@OsamaJaved上に追加しました – user1388581

答えて

0

はこれをみては?

デフォルトでは、パフォーマンス上の理由により、write()コールの後にプリントストリームがフラッシュされません。

だから、あなたが直接あなたがストリームの

http://docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html

+0

私は試しましたが、まだ失敗しました – user1388581

+0

私はしばらく前にやったプロジェクトのためにこのワーカー。私はサーバー側で自動flusingを有効にし、クライアント側でbufferedReaderを使用しました。 –

+0

okありがとう、私は試してみる... :) – user1388581