激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java多線程實現服務器端與多客戶端之間的通信

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

2020-06-27 14:49Shadow0418 JAVA教程

本篇文章主要介紹了java多線程實現服務器端與多客戶端之間的通信,介紹了多線程來實現服務器與多線程之間的通信的基本步驟,有需要的小伙伴可以參考下。

java語言構建一個網絡服務器,實現客戶端和服務器之間通信,實現客戶端擁有獨立線程,互不干擾。

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

  1. 服務器端創建ServerSocket,循環調用accept()等待客戶端鏈接
  2. 客戶端創建一個Socket并請求和服務器端鏈接
  3. 服務器端接受客戶端請求,創建socekt與該客戶端建立專線鏈接
  4. 建立鏈接的socket在一個單獨的線程上對話
  5. 服務器繼續等待新的鏈接

服務器端Server.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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();
    }
  }
}

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91高清在线 | 永久在线观看电影 | 羞羞答答影院 | 久久福利小视频 | 圆产精品久久久久久久久久久 | 久色婷婷 | 日韩视频在线免费 | 免费一区二区三区 | 久久亚洲精品久久国产一区二区 | 国产精品视频2021 | 加勒比综合 | 久久精品国产99久久久古代 | 久久综合久久综合久久 | 欧美一级做性受免费大片免费 | 内地av在线 | 国产日本欧美在线观看 | 一级毛片免费一级 | 男女羞羞视频在线免费观看 | 久久嗨| 午夜精品福利在线观看 | 久久久久久久久日本理论电影 | 久久久久亚洲a | 日日天日日夜日日摸 | 91色一区二区三区 | 热@国产 | 久久精品国产一区二区 | 国产一区二区三区视频免费 | 91福利在线观看 | 欧美日韩影视 | 精品亚洲一 | 精品国产高清一区二区三区 | 国产一区二区影视 | 中文字幕亚洲情99在线 | 国产精品爱久久久久久久 | 日本一区二区不卡在线观看 | 在线播放免费播放av片 | 黄色av网| 一级电影在线观看 | 91短视频在线观看免费最新 | 中文字幕在线播放一区 | 午夜影院a|