1. 程式人生 > >java多執行緒(2)---基於ExecutorService的socket通訊執行緒池

java多執行緒(2)---基於ExecutorService的socket通訊執行緒池

package socketPool;

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintStream; 
import java.net.Socket; 
import java.net.SocketTimeoutException; 
 
public class Client1 { 
    public static void main(String[] args) throws IOException { 
        //客戶端請求與本機在20006埠建立TCP連線  
        Socket client = new Socket( "127.0.0.1", 20006); 
        client.setSoTimeout(10000); 
        //獲取鍵盤輸入  
        BufferedReader input = new BufferedReader( new InputStreamReader(System.in )); 
        //獲取Socket的輸出流,用來發送資料到服務端   
        PrintStream out = new PrintStream(client.getOutputStream()); 
        //獲取Socket的輸入流,用來接收從服務端傳送過來的資料   
        BufferedReader buf =  new BufferedReader( new InputStreamReader(client.getInputStream())); 
        boolean flag = true; 
        while(flag){ 
            System. out.print( "客戶端,輸入資訊:" ); 
            String str = input.readLine(); 
            //傳送資料到服務端   
            out.println( str); 
            if( "bye".equals( str)){ 
                flag = false; 
            } else{ 
                try{ 
                    //從伺服器端接收資料有個時間限制(系統自設,也可以自己設定),超過了這個時間,便會丟擲該異常 
                    String echo = buf.readLine(); 
                    System. out.println( echo); 
                } catch(SocketTimeoutException e){ 
                    System. out.println( "Time out, No response"); 
                } 
            } 
        } 
        input.close(); 
        if(client != null){ 
            //如果建構函式建立起了連線,則關閉套接字,如果沒有建立起連線,自然不用關閉 
            client.close(); //只關閉socket,其關聯的輸入輸出流也會被關閉 
        } 
    } 
}