服务端向客户端发送数据,但是客户端接收不到

问题:

通过Socket,服务端向客户端发送数据时,客户端一直接收不到

服务端发送代码:

ClientWriteHandler.this.printStream.print(msg);

原因:

在socket代码中使用print方法时,要想将数据发送出去,必须在发送的数据后面添加”\n”换行符标识并且调用flush()方法。

printwriter如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。 
此外,在println中,已经调用过flush()方法,源代码如下:

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;
    }
}


在print中则没有,源代码如下:

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

解决办法:

1、使用print()方法时在发送的数据后加换行符"\n"并调用flush()方法

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

2、直接调用println()方法

 ClientWriteHandler.this.printStream.println(msg);

发布了174 篇原创文章 · 获赞 115 · 访问量 83万+

猜你喜欢

转载自blog.csdn.net/nicolelili1/article/details/103977793