项目场景:
Java网络编程的Echo项目,该项目框架如下。
问题描述:
- 当在客户端使用PrintWriter进行Socket写入时,发现服务器端无法接收到数据。
- 在客户端使用Scanner接收命令行输入字符串,然后发送到服务器时,服务器无法读到数据
原因分析:
- 字节流(Writer及其子类)写入数据(包括父类的write方法和打印流的print方法),写入的时候都是写到缓存里,需要手动情况缓存(flush)之后才是真正的写入到socket。因此如果没有手动清空缓存,实际上是并没有成功发送消息的。
- Scanner接收数据时,通过nextLine方法读到字符串不会把结尾的换行符带上,这样服务器使用Scanner.nextLine读取时,因为没有换行符,所以无法把字符串读到。
解决方案:
- 使用PrintStream向socket写入数据,或者使用PrintWriter写数据并且每次写入后手动清空缓存(flush)。
- 使用BufferedReader.readLine或者Scanner.nextLine读取命令行输入后,字符串结尾手动添加换行。或者向Socket写入数据时,使用PrintStream的println方法自动追加换行。
版权声明:本文为u013165358原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。