客户端输出流是否shutdownOutput()会不会对程序造成异常?
我在练习的时候客户端请求信息时若未调用shutdownOutput()方法,服务器读取数据时会出现阻塞现象,导致后面代码无法执行...... 有没有大神给我指点下啊?
我在练习的时候客户端请求信息时若未调用shutdownOutput()方法,服务器读取数据时会出现阻塞现象,导致后面代码无法执行...... 有没有大神给我指点下啊?
2016-04-04
如果代码整体还是这样只做测试之用,那我的建议有两个:
在writer.write("用户名:admin;密码:123456");中输出的字串结尾手动加上换行符,变成writer.write("用户名:admin;密码:123456\n");或writer.write("用户名:admin;密码:123456\r");
将writer.write("用户名:admin;密码:123456");这个方法改为java.io.PrintWriter.println()这个方法,即改为writer.println("用户名:admin;密码:123456");
我认为以上两种方法均可不必加上client.shutdownOutput();这句代码。
// 创建客户端Socket
Socket client = new Socket("localhost", 8888);
// 创建输出流,写入请求信息
OutputStream out = client.getOutputStream();
PrintWriter writer = new PrintWriter(out);
writer.write("用户名:admin;密码:123456");
writer.flush();
//这行代码如果没有,服务器读取数据就会一直阻塞
client.shutdownOutput();
// 创建输入流,接受服务器响应信息
InputStream in = client.getInputStream();
InputStreamReader inr = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(inr);
String info = null;
while ((info = reader.readLine()) != null) {
System.out.println("我是客户端,服务器说:"+info);
}
//关闭输入流
client.shutdownInput();
// 关闭资源
client.close();
举报