国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java多線程實現服務器端與多客戶端之間的通信

2019-11-26 13:39:27
字體:
來源:轉載
供稿:網友

用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();     }   } } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛扎县| 融水| 子洲县| 鄂尔多斯市| 顺昌县| 毕节市| 安顺市| 中西区| 南丰县| 宁陵县| 新晃| 和龙市| 麦盖提县| 宿松县| 治多县| 松滋市| 开封市| 常州市| 安丘市| 武鸣县| 桐乡市| 彰化县| 从化市| 鄂尔多斯市| 莎车县| 莲花县| 光山县| 东乌珠穆沁旗| 景洪市| 长白| 达尔| 吉隆县| 惠水县| 华坪县| 龙山县| 义乌市| 合山市| 馆陶县| 仙游县| 开阳县| 伊吾县|