为了账号安全,请及时绑定邮箱和手机立即绑定

客户端为什么关闭输入流会报错

老师在上面关闭了socket的输出流,接下来的接收服务器响应的代码我发现没有关闭socket的输入流,于是我加了socket.shuntdownInput程序就会报错

http://img1.sycdn.imooc.com//57c4495c000129fb07080501.jpg

package com.imooc;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client
{
	public static void main(String[] args)
	{
		try
		{
			Socket sk=new Socket("localhost",8888);
			OutputStream os=sk.getOutputStream();
			
			PrintWriter pw=new PrintWriter(os);
			pw.println("用户名:admin,密码:123456");
			pw.flush();//刷新缓存
			
			sk.shutdownOutput();
			
			//创建输入流,接收服务端响应
			InputStream is=sk.getInputStream();
			BufferedReader br=new BufferedReader(new InputStreamReader(is));
			String info=null;
			while((info=br.readLine())!=null){
				System.out.println("我是客户端,服务器说:"+info);
			}
			
			br.close();
			is.close();
			sk.shutdownInput();//关闭socket的输入流
			
			pw.close();
			os.close();
			sk.close();
			
			
			
		} catch (UnknownHostException e)
		{
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e)
		{
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}


正在回答

5 回答

我也碰到了这个问题,是这样的,你应该先关闭输入输出流,然后在关闭资源,就不会这样了,把上面的两个资源关闭放到下面就可以了

0 回复 有任何疑惑可以回复我~

我想你跟我犯了同样的错误,我也是报的这个错误。然后我发现客户端不是关闭输入流socket.shutdownInput();,而是关闭输出流scoket.shutdownOutput();

因为先启动服务器,再启动客户端,你想想:

  1. 首先服务器端是建立了socket然后等待接收信息的,信息接收完毕,所以要关闭输入流。

  2. 然后客户端是发送信息的,信息发送完毕,所以要关闭输出流。

  3. 其次服务器端的输出流以及客户端的输入流在最后关闭资源的时候会自动关闭的。

1 回复 有任何疑惑可以回复我~

 关闭输出流时,会连带的自动把socket也关了的,所以,你后面再关闭输入流时,socket其实已经被关闭了,估计会报 空指针异常!

0 回复 有任何疑惑可以回复我~
#1

慕粉客 提问者

如果关闭输出流的时候,Socket被关闭了,那后面怎么调用Socket来接受服务器的响应呢。
2016-08-29 回复 有任何疑惑可以回复我~
#2

要飞的鸟 回复 慕粉客 提问者

不要关闭输出流 而是在最后整个关闭socket即可,关闭socket就可以输入出流自动关闭了。
2016-08-30 回复 有任何疑惑可以回复我~

你没有先启动服务器端

1 回复 有任何疑惑可以回复我~
#1

慕粉客 提问者

先启动了服务器的
2016-08-29 回复 有任何疑惑可以回复我~

报的什么错误,贴出来

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

客户端为什么关闭输入流会报错

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信