猿问

我跟老师一样的代码?为什么会出现这样的异常?

package huangfeng.TongXin;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * 基于TCP协议的Socket通信,实现用户登录
 * 服务器端
 */
public class Server {
	public static void main(String[] args) {
		try {
			//创建一个Socket服务器端,即ServerSocket,指定绑定端口,并监听此端口
			//创建ServerSocket的实例
			ServerSocket serverSocket = new ServerSocket(9999);
			System.out.println("******服务器即将启动,等待客户端的连接******");
			//调用accept()方法开始监听,等待服务器的连接
			Socket socket = serverSocket.accept();
			//获取输入流,并读取客户端信息
			InputStream is = socket.getInputStream();//字节输入流
			//把字节输入流包装为字符输入流
			InputStreamReader isr = new InputStreamReader(is);
			//加载缓冲
			BufferedReader br = new BufferedReader(isr);
			String info = null;
			//获取客户端信息
			while((info = br.readLine())!=null){
				System.out.println("我是服务器,客户端说:"+info);
				//关闭输入流
				socket.shutdownInput();
				//关闭相关资源
				br.close();
				isr.close();
				is.close();
				socket.close();
				serverSocket.close();
			}
			
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}
package huangfeng.TongXin;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/*
 * 客户端
 */
public class Client {
	public static void main(String[] args) {
		try {
			//创建客户端socket。指定服务器的地址和端口
			Socket socket = new Socket("localhost", 9999);
			//获取输出流,向服务器端发送信息
			OutputStream os = socket.getOutputStream();//字节输出流
			//将输出流包装为打印流
			PrintWriter pw = new PrintWriter(os);
			pw.write("用户名:huangfeng ; 密码:8888");
			pw.flush();
			socket.shutdownOutput();//关闭输出流
			//关闭相关资源
			pw.close();
			os.close();
			socket.close();
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		

	}

}

******服务器即将启动,等待客户端的连接******

我是服务器,客户端说:用户名:huangfeng ; 密码:8888

java.io.IOException: Stream closed

at java.io.BufferedReader.ensureOpen(BufferedReader.java:115)

at java.io.BufferedReader.readLine(BufferedReader.java:310)

at java.io.BufferedReader.readLine(BufferedReader.java:382)

at huangfeng.TongXin.Server.main(Server.java:31)


黄锋黄锋
浏览 1876回答 3
3回答

ziom

在读取BufferedReader的时候不能把它关了//获取客户端信息             while((info = br.readLine())!=null){     System.out.println("我是服务器,客户端说:"+info);     //关闭输入流     socket.shutdownInput();     //关闭相关资源     // br.close(); 把这行注释了再试试     isr.close();     is.close();     socket.close();     serverSocket.close(); }

lindajia

 //获取客户端信息            while((info = br.readLine())!=null){                System.out.println("我是服务器,客户端说:"+info);               }//大括号在这里 表示循环读出数据完了后,再进行后面的关闭输入流资源操作                //关闭输入流                socket.shutdownInput();                //关闭相关资源                br.close();                isr.close();                is.close();                socket.close();                serverSocket.close();            }             
随时随地看视频慕课网APP

相关分类

Java
我要回答