http://blog.csdn.net/wjw_java/article/details/7971412 java
//客户端
//客户端 package com.net.tcp; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; /** * 该例子出现的问题 * 现象:客户端和服务端都在莫名的等待,为何? * 由于客户端和服务端都有阻塞式方法,这些方法没有读到结束标记,那么就一直等,而致使两端都在等待 * @author zjw * */ public class Tcp_Client_while { public static void main(String[] args) throws IOException { Socket soc=new Socket("127.0.0.1",10000); //建立读取控制台的流 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); // BufferedWriter bw_out=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream())); BufferedReader br_in=new BufferedReader(new InputStreamReader(soc.getInputStream())); PrintWriter pw=new PrintWriter(soc.getOutputStream(),true);//添加true表示自动刷新 String str=null; while(null!=(str=br.readLine())){//读取控制台的数据 if("over".equals(str)){ return ; //这里也能够用break } // bw_out.write(str); // bw_out.newLine();//添加换行, // bw_out.flush();//刷新缓冲区 pw.println(str);//三句变一句 String in=br_in.readLine(); System.out.println("服务端发回来的信息:"+in); } br.close(); soc.close(); } } //服务端 package com.net.tcp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 该例子出现的问题 * 现象:客户端和服务端都在莫名的等待,为何? * 由于客户端和服务端都有阻塞式方法,这些方法没有读到结束标记,那么就一直等,而致使两端都在等待 * @author zjw * */ public class Tcp_Server_while { public static void main(String[] args) throws IOException { //建立服务器端对象 ServerSocket ss=new ServerSocket(10000); // //获取控制台数据 // BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); Socket client=ss.accept(); //获取客户端发过来的信息 BufferedReader br_in=new BufferedReader(new InputStreamReader(client.getInputStream())); // BufferedWriter bw_out=new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); PrintWriter pw=new PrintWriter(client.getOutputStream(),true);//添加true表示自动刷新 String str=null; while(null!=(str=br_in.readLine())){ System.out.println("客户端发过来的信息:"+str); // bw_out.write(str.toUpperCase()); // bw_out.newLine();//添加换行符 // bw_out.flush();//刷新缓冲区 pw.println(str.toUpperCase());//三句变一句 } ss.close();//关闭服务端 } }