A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我下面这段代码运行就会出问题,不是报错和异常,而是好像卡带了...客户端的代码

[Java] 纯文本查看 复制代码
Socket socket = null;
	PrintWriter pw = null;
	Scanner sc = new Scanner(System.in);
	InputStreamReader isr = null;
	BufferedReader br = null;

	public Client() {
		try {
			System.out.println("客户端");
			socket = new Socket("127.0.0.1", 55555);
			pw = new PrintWriter(socket.getOutputStream());
			pw.println("aaaa");
//注意看这里
//pw.flush();

			socket = new ServerSocket(12345).accept();
			isr = new InputStreamReader(socket.getInputStream());
			br = new BufferedReader(isr);
			String word = br.readLine();
			System.out.println(word);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(br != null) {
					br.close();
				}
			} catch (IOException e1) {
				e1.printStackTrace();
			} finally {
				if(pw != null) {
					pw.close();
				}
				try {
					if( socket!= null) {
						socket.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
}
		}



服务器端的代码
[Java] 纯文本查看 复制代码
ServerSocket serverSocket = null;
	Socket socket = null;
	InputStreamReader isr = null;
	BufferedReader br = null;
	PrintWriter pw = null;

	public Server() {
		try {
			System.out.println("服务器");
			serverSocket = new ServerSocket(55555);
			socket = serverSocket.accept();
			isr = new InputStreamReader(socket.getInputStream());
			br = new BufferedReader(isr);
			String word = br.readLine();
			System.out.println(word);

			Socket socket = new Socket("127.0.0.1", 12345);
			pw = new PrintWriter(socket.getOutputStream());
			pw.println("连接成功");
//注意看这里
//pw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(pw != null) {
				pw.close();
			}
			try {
				if(br != null) {
					br.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					if(socket != null) {
						socket.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}



当我解开那两行 pw.flush(); 代码时,程序的卡带问题就没有了。
有人能说一下IO流的阻塞问题吗?

2 个回复

倒序浏览
首先弄明白pw.flush()这行代码的作用,刷新缓存区,将缓存区的数据输出到指定地方。如果不刷新,也可以,但是必须要关流,就是释放资源,pw.close(),关流之后数据也是会输出到指定地方的。看了你的代码,你的代码中并没有关流这个操作,所以如果你既没有刷新,也没有关流的话,你的数据是只会读取到内存中,所以就出现了你所说的卡带问题!
回复 使用道具 举报
本帖最后由 IMZero 于 2018-1-29 23:46 编辑

居然发出去了,我还以为没有发出去
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马