問題:
ソケット、サービスを介してクライアントにデータを送信する場合、クライアントは以下の受信されました
サーバーは、コードを送信します。
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);