サーバーはクライアントにデータを送信しますが、クライアントが受信しません

問題:

ソケット、サービスを介してクライアントにデータを送信する場合、クライアントは以下の受信されました

サーバーは、コードを送信します。

ClientWriteHandler.this.printStream.print(msg);

理由:

データを送信するために、コードソケットに印刷法を用いる場合の「n \」識別データを送信する後に改行及びフラッシュ()メソッドを追加する必要があります。

 

PrintWriterの改行が完了するたびに自動更新、そして唯一の方法では、コールのprintln、printf関数、またはフォーマットがこれを行うには、ないかもしれないだけで出力を有効にした場合。これらのメソッドは、プラットフォーム独自の行区切りの概念ではなく、改行文字を使用します。 
さらに、のprintlnに、フラッシュ()メソッドが呼び出されている次のように、ソースコードは、次のとおりです。

public void println() {
    newLine();
}
private void newLine() {
    try {
       synchronized (lock) {
        ensureOpen();
        out.write(lineSeparator);
        if (autoFlush)//这里就调用了flush()方法
           out.flush();
       }
    }catch (InterruptedIOException x) {
       Thread.currentThread().interrupt();
    }catch (IOException x) {
       trouble = true;
    }
}


プリントされていない次のように、ソースコードは、次のとおりです。

public void print(String s) {
    if (s == null) {
       s = "null";
    }
    write(s);
    }
}

ソリューション:

図1に示すように、伝送ラインフィードの印刷()メソッドを使用してデータ「\ n」とフラッシュ()メソッド

  ClientWriteHandler.this.printStream.print(msg+"\n");
  ClientWriteHandler.this.printStream.flush();

図2に示すように、ダイレクトコールのprintln()メソッド

 ClientWriteHandler.this.printStream.println(msg);

公開された174元の記事 ウォンの賞賛115 ビュー830 000 +

おすすめ

転載: blog.csdn.net/nicolelili1/article/details/103977793