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();//關閉服務端 } }