TCP客戶端,服務端互相發送信息

http://blog.csdn.net/wjw_java/article/details/7971412 java

 

           //客戶端   
  1. package com.net.tcp;  
  2.   
  3. import java.io.BufferedInputStream;  
  4. import java.io.BufferedReader;  
  5. import java.io.BufferedWriter;  
  6. import java.io.FileWriter;  
  7. import java.io.IOException;  
  8. import java.io.InputStreamReader;  
  9. import java.io.OutputStreamWriter;  
  10. import java.io.PrintWriter;  
  11. import java.net.Socket;  
  12.   
  13. /** 
  14.  * 該例子出現的問題 
  15.  * 現象:客戶端和服務端都在莫名的等待,爲何? 
  16.  * 由於客戶端和服務端都有阻塞式方法,這些方法沒有讀到結束標記,那麼就一直等,而致使兩端都在等待 
  17.  * @author zjw 
  18.  * 
  19.  */  
  20. public class Tcp_Client_while {  
  21.     public static void main(String[] args) throws IOException {  
  22.         Socket soc=new Socket("127.0.0.1",10000);  
  23.         //建立讀取控制檯的流   
  24.         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));  
  25. //      BufferedWriter bw_out=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));   
  26.         BufferedReader br_in=new BufferedReader(new InputStreamReader(soc.getInputStream()));  
  27.           
  28.         PrintWriter pw=new PrintWriter(soc.getOutputStream(),true);//添加true表示自動刷新   
  29.           
  30.         String str=null;  
  31.         while(null!=(str=br.readLine())){//讀取控制檯的數據   
  32.             if("over".equals(str)){  
  33.                 return ;   //這裏也能夠用break   
  34.             }  
  35. //          bw_out.write(str);   
  36. //          bw_out.newLine();//添加換行,   
  37. //          bw_out.flush();//刷新緩衝區   
  38.               
  39.             pw.println(str);//三句變一句   
  40.               
  41.             String in=br_in.readLine();  
  42.             System.out.println("服務端發回來的信息:"+in);  
  43.         }  
  44.         br.close();  
  45.         soc.close();  
  46.     }  
  47. }  
  48.   
  49. //服務端   
  50. package com.net.tcp;  
  51.   
  52. import java.io.BufferedReader;  
  53. import java.io.BufferedWriter;  
  54. import java.io.IOException;  
  55. import java.io.InputStreamReader;  
  56. import java.io.OutputStreamWriter;  
  57. import java.io.PrintWriter;  
  58. import java.net.ServerSocket;  
  59. import java.net.Socket;  
  60.   
  61. /** 
  62.  * 該例子出現的問題 
  63.  * 現象:客戶端和服務端都在莫名的等待,爲何? 
  64.  * 由於客戶端和服務端都有阻塞式方法,這些方法沒有讀到結束標記,那麼就一直等,而致使兩端都在等待 
  65.  * @author zjw 
  66.  * 
  67.  */  
  68. public class Tcp_Server_while {  
  69.     public static void main(String[] args) throws IOException {  
  70.         //建立服務器端對象   
  71.         ServerSocket ss=new ServerSocket(10000);  
  72. //      //獲取控制檯數據   
  73. //      BufferedReader br=new BufferedReader(new InputStreamReader(System.in));   
  74.         Socket client=ss.accept();  
  75.         //獲取客戶端發過來的信息   
  76.         BufferedReader br_in=new BufferedReader(new InputStreamReader(client.getInputStream()));  
  77. //      BufferedWriter bw_out=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));   
  78.         PrintWriter pw=new PrintWriter(client.getOutputStream(),true);//添加true表示自動刷新   
  79.         String str=null;  
  80.         while(null!=(str=br_in.readLine())){  
  81.             System.out.println("客戶端發過來的信息:"+str);  
  82. //          bw_out.write(str.toUpperCase());   
  83. //          bw_out.newLine();//添加換行符   
  84. //          bw_out.flush();//刷新緩衝區   
  85.             pw.println(str.toUpperCase());//三句變一句   
  86.         }  
  87.         ss.close();//關閉服務端   
  88.     }  
  89. }  
//客戶端
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();//關閉服務端
	}
}
相關文章
相關標籤/搜索