一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - JAVA教程 - java多線程實現(xiàn)服務(wù)器端與多客戶端之間的通信

java多線程實現(xiàn)服務(wù)器端與多客戶端之間的通信

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

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

java語言構(gòu)建一個網(wǎng)絡(luò)服務(wù)器,實現(xiàn)客戶端和服務(wù)器之間通信,實現(xiàn)客戶端擁有獨立線程,互不干擾。

應(yīng)用多線程來實現(xiàn)服務(wù)器與多線程之間的通信的基本步驟

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

服務(wù)器端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協(xié)議的Socket通信,實現(xiàn)用戶登錄
 * 服務(wù)器端
 */
public class Server {
 
  public static void main(String[] args) {
 
    try {
      //1、創(chuàng)建一個服務(wù)器端Socket,即ServerSocket, 指定綁定的端口,并監(jiān)聽此端口
      ServerSocket serverSocket = new ServerSocket(8888);
      Socket socket = null;
      //記錄客戶端的數(shù)量
      int count = 0;
      System.out.println("***服務(wù)器即將啟動,等待客戶端的鏈接***");
      //循環(huán)監(jiān)聽等待客戶端的鏈接
      while (true){
        //調(diào)用accept()方法開始監(jiān)聽,等待客戶端的鏈接
        socket = serverSocket.accept();
        //創(chuàng)建一個新的線程
        ServerThread serverThread = new ServerThread(socket);
        //啟動線程
        serverThread.start();
 
        count++; //統(tǒng)計客戶端的數(shù)量
        System.out.println("客戶端的數(shù)量: " + count);
        InetAddress address = socket.getInetAddress();
        System.out.println("當(dāng)前客戶端的IP : " + address.getHostAddress());
      }
 
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

服務(wù)器端線程處理類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.
 * 服務(wù)器端線程處理類
 */
public class ServerThread extends Thread {
 
  //和本線程相關(guān)的Socket
  Socket socket = null;
  public ServerThread(Socket socket){
    this.socket = socket;
  }
 
  //線程執(zhí)行的操作,響應(yīng)客戶端的請求
  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); //將字節(jié)流轉(zhuǎn)化為字符流
      br = new BufferedReader(isr); //添加緩沖
      String info = null;
      //循環(huán)讀取數(shù)據(jù)
      while ((info = br.readLine()) != null){
        System.out.println("我是服務(wù)器,客戶端說: " +info);
      }
 
      socket.shutdownInput(); //關(guān)閉輸入流
 
      //獲取輸出流,響應(yīng)客戶端的請求
      os = socket.getOutputStream();
      pw = new PrintWriter(os); //包裝為打印流
      pw.write("歡迎你");
      pw.flush(); //將緩存輸出
 
 
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
 
 
        try {
          //關(guān)閉資源
          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、創(chuàng)建客戶端Socket,指定服務(wù)器端口號和地址
      Socket socket = new Socket("localhost",8888);
      //2、獲取輸出流,向服務(wù)器發(fā)送信息
      OutputStream os = socket.getOutputStream(); //字節(jié)輸出流
      PrintWriter pw = new PrintWriter(os); //將輸出流包裝為打印流
      pw.write("用戶名:tom; 密碼:456");
      pw.flush();
      socket.shutdownOutput(); //關(guān)閉輸出流
 
      InputStream is = socket.getInputStream();
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(isr);
 
      String info = null;
      //循環(huán)讀取
      while ((info = br.readLine()) != null){
        System.out.println("我是客戶端:服務(wù)器說:" + info);
      }
 
      br.close();
      is.close();
      isr.close();
 
 
      pw.close();
      os.close();
      socket.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91精品91| 亚洲区精品 | www.日日日| 婷婷激情综合五月天 | www.久久艹| 性导航h| 亚洲精品一线二线三线 | 日本免费高清在线观看播放 | 国产精品久久国产三级国电话系列 | 四虎影视库永久在线地址 | 色久久一个亚洲综合网 | 午夜精品久久久内射近拍高清 | 日本人成动漫网站在线观看 | 国内激情自拍 | 日本玖玖视频 | 国产一区二区免费福利片 | 女主被男主做哭失禁高h | 天天性综合 | 精品一区二区免费视频蜜桃网 | 日韩视频免费一区二区三区 | 91高清国产经典在线观看 | 亚洲欧美日韩在线观看看另类 | 亚洲色欲色欲综合网站 | 99精品热 | 97精品国产自在现线免费观看 | 国产在线观看a | 北条麻妃黑人 | 精品一区二区国语对白 | 亚洲精品在线播放 | 紧致肉肉高h | 出轨同学会免费观看 | 青青在线视频免费 | 喜马拉雅听书免费版 | 青青网| 日韩精品久久不卡中文字幕 | 99久久免费看精品国产一区 | 高清不卡免费一区二区三区 | 波多野结衣在线免费观看 | 亚洲社区在线 | 日本无遮挡吸乳视频看看 | 青青青国产精品国产精品久久久久 |