0

サーバーからクライアントにメッセージを送信したいのですが、いくつかの問題が見つかりました。

  • out.flush()によって送信された場合。メソッドの場合、クライアントはそれを読み取ることができますが、
  • メソッドを使用するとout.write();、クライアントは-1(データを受信して​​いません)のステータスを受け取ります

クライアントがnmbr 2のメソッドでメッセージを受信できるようにするには、何を追加すればよいですか。以下は、クライアント側でサーバーからメッセージを受信するために使用するメソッドです。

    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(); 

クライアント側で私はこれを使用します:

    DataInputStream in = new DataInputStream(clientsock.getInputStream());

    DataOutputStream out = new DataOutputStream(clientsock.getOutputStream());

サーバー側で私はこれを使用します:

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

        out = new PrintWriter(
              new OutputStreamWriter(socket.getOutputStream()));
4

1 に答える 1

0

これを試して:

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

次に、 out.println() を使用して行を送信しますか?

デフォルトでは、パフォーマンス上の理由により、出力ストリームは write() 呼び出しの後に flush() しません。

したがって、フラッシュを直接使用する必要がない場合は、次の「println、printf、またはフォーマット」のいずれかと、自動フラッシュを有効にするコンストラクターを使用する必要があります。

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

于 2012-05-11T09:28:19.053 に答える