java多線程實現伺服器端與多用戶端之間的通訊_java

來源:互聯網
上載者:User

用java語言構建一個網路伺服器,實現用戶端和伺服器之間通訊,實現用戶端擁有獨立線程,互不干擾。

應用多線程來實現伺服器與多線程之間的通訊的基本步驟

  1. 伺服器端建立ServerSocket,迴圈調用accept()等待用戶端連結
  2. 用戶端建立一個Socket並請求和伺服器端連結
  3. 伺服器端接受用戶端請求,建立socekt與該用戶端建立專線連結
  4. 建立連結的socket在一個單獨的線程上對話
  5. 伺服器繼續等待新的連結

伺服器端Server.java

package test.concurrent.socket;  import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket;  /**  * Created by dong on 15-6-22.  * 基於TCP協議的Socket通訊,實現使用者登入  * 伺服器端  */ public class Server {    public static void main(String[] args) {      try {       //1、建立一個伺服器端Socket,即ServerSocket, 指定綁定的連接埠,並監聽此連接埠       ServerSocket serverSocket = new ServerSocket(8888);       Socket socket = null;       //記錄用戶端的數量       int count = 0;       System.out.println("***伺服器即將啟動,等待用戶端的連結***");       //迴圈監聽等待用戶端的連結       while (true){         //調用accept()方法開始監聽,等待用戶端的連結         socket = serverSocket.accept();         //建立一個新的線程         ServerThread serverThread = new ServerThread(socket);         //啟動線程         serverThread.start();          count++; //統計用戶端的數量         System.out.println("用戶端的數量: " + count);         InetAddress address = socket.getInetAddress();         System.out.println("當前用戶端的IP : " + address.getHostAddress());       }      } catch (IOException e) {       e.printStackTrace();     }   } } 

伺服器端線程處理類ServerThread.java

package test.concurrent.socket;  import java.io.*; import java.net.Socket;  /**  * Created by dong on 15-6-22.  * 伺服器端線程處理類  */ public class ServerThread extends Thread {    //和本線程相關的Socket   Socket socket = null;   public ServerThread(Socket socket){     this.socket = socket;   }    //線程執行的操作,響應用戶端的請求   public void run(){      InputStream is = null;     InputStreamReader isr = null;     BufferedReader br = null;      OutputStream os = null;     PrintWriter pw = null;     try {        //擷取一個輸入資料流,並讀取用戶端的資訊       is = socket.getInputStream();       isr = new InputStreamReader(is); //將位元組流轉化為字元流       br = new BufferedReader(isr); //添加緩衝       String info = null;       //迴圈讀取資料       while ((info = br.readLine()) != null){         System.out.println("我是伺服器,用戶端說: " +info);       }        socket.shutdownInput(); //關閉輸入資料流        //擷取輸出資料流,響應用戶端的請求       os = socket.getOutputStream();       pw = new PrintWriter(os); //封裝為列印流       pw.write("歡迎你");       pw.flush(); //將緩衝輸出       } catch (IOException e) {       e.printStackTrace();     }finally {           try {           //關閉資源           if (pw != null)             pw.close();           if (os != null)             os.close();           if (is != null)             is.close();           if (isr != null)             isr.close();           if (br != null)             br.close();           if (socket != null)             socket.close();         } catch (IOException e) {           e.printStackTrace();          }      }      } } 

用戶端Client.java

package test.concurrent.socket;  import java.io.*; import java.net.Socket;  /**  * Created by dong on 15-6-22.  * 用戶端  */ public class Client {    public static void main(String[] args) {      try {       //1、建立用戶端Socket,指定伺服器連接埠號碼和地址       Socket socket = new Socket("localhost",8888);       //2、擷取輸出資料流,向伺服器發送資訊       OutputStream os = socket.getOutputStream(); //位元組輸出資料流       PrintWriter pw = new PrintWriter(os); //將輸出資料流封裝為列印流       pw.write("使用者名稱:tom; 密碼:456");       pw.flush();       socket.shutdownOutput(); //關閉輸出資料流        InputStream is = socket.getInputStream();       InputStreamReader isr = new InputStreamReader(is);       BufferedReader br = new BufferedReader(isr);        String info = null;       //迴圈讀取       while ((info = br.readLine()) != null){         System.out.println("我是用戶端:伺服器說:" + info);       }        br.close();       is.close();       isr.close();         pw.close();       os.close();       socket.close();     } catch (IOException e) {       e.printStackTrace();     }   } } 

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.