1. 程式人生 > 其它 >java核心類庫——網路程式設計

java核心類庫——網路程式設計

一:概述:

1.網路常識:

2.網路程式設計協議:

(A B為友軍,C為敵軍,A告訴B要去攻打C,流程:1)A排探子去給C說這件事 2)C將A的探子留下,派出自己的探子到A去確認 3)A講到C的探子,然後讓C的探 子回到C 4)C見自家的探子回來了,確認訊息可靠,將A的探子放回去)

TCP通過這種連線協議,就很安全

3.

瀏覽器與伺服器:優點:通過伺服器可以及時的對版本進行跟新 缺點:不得不遵守瀏覽器創造的的規定,而且會造成資料洩露

客戶端與伺服器:優點:因為都是自己操控的,所以在修改版本的時候就很自由,安全。 缺點:只要使用者不主動更新版本,伺服器更新的內容客戶端無法實現

4.

.

OSI模型:舉個栗子:你通過QQ發訊息,就會經過應用層,到下一個層,直到物理層,然後經過網線,發生出去

四次揮手:1)A對C說,二弟我要走了,

2)C對A說,大哥你確定,

3)A對C說,我確定,

4)C對A說,好的再見。

二:學習兩個類(來搭建 服務端-ServerSocket 和 客戶端-Socket)

1.Socket是兩臺計算機之間通訊的端點,是網路驅動提供給應用程式程式設計的一種介面,一套標準,一套機制。

2.工作流程:客戶端通過ServerSocket和服務端建立一個練習,服務端也會返回一個Socket物件,然後兩個Socket之間就可以進行通訊。

3.網路程式設計,一定是現有伺服器,然後我們客戶端採取連線伺服器(以後網路程式設計一定有兩個主方法,一個是服務端,一個是客戶端,先執行服務端,在執行客戶端)

4.ServerSocket和Socket構造方法,和一些相關的內容。

5.

5.1)程式碼演示:(一定要先啟動伺服器,等待客戶端連線,然後在啟動客戶端,客戶端的啟動可以出發伺服器執行任務)

我是伺服器:1 import java.io.IOException;

 2 import java.net.ServerSocket;
 3 
 4 public class Test01 {
 5     /**
 6      * 我是伺服器
7 * @param args 8 */ 9 public static void main(String[] args) throws IOException { 10 //搭建伺服器 11 ServerSocket socket = new ServerSocket(10008); 12 System.out.println("伺服器搭建完成"); 13 //等待客戶端連線,只有當客戶端連線上伺服器後,伺服器才會執行後面的程式碼。
14 Socket socket = socket.accept(); 15 System.out.println("一個客戶端連線了"); 16 System.out.println("伺服器執行結束"); 17 } 18 }

我是客戶端:

 1 import java.io.IOException;
 2 import java.net.Socket;
 3 
 4 public class Test02 {
 5     /**
 6      * 我是客戶端
 7      * @param args
 8      */
 9     public static void main(String[] args) throws IOException {
10         //建立客戶端物件
11         Socket socket = new Socket("localhost",10008);
12 
13     }

5.2)建立完成之後,如何進行交流呢:建立聯絡之後,服務端和客戶端都有了一個Socket物件,通過這個物件可以去呼叫輸入輸出流物件來進行訊息的交流

5.3)程式碼演示:

伺服器給客戶端寫訊息

 1 import java.io.IOException;
 2 
 3 import java.io.OutputStream;
 4 import java.io.PrintStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 
 8 public class Test01 {
 9     /**
10      * 我是伺服器
11      * @param args
12      */
13     public static void main(String[] args) throws IOException {
14         //搭建伺服器
15         ServerSocket serversocket = new ServerSocket(10008);
16         System.out.println("伺服器搭建完成");
17         //等待客戶端連線
18         Socket socket = serversocket.accept();
19         System.out.println("一個客戶端連線了");
20         /**
21          * 現在我要給客戶端發訊息
22          */
23         //1.獲取一個輸出流
24         OutputStream os = socket.getOutputStream();
25         //2.將輸入流轉換為一個列印流
26         PrintStream ps = new PrintStream(os);
27         //3.呼叫方法,列印
28         ps.println("客戶端你好,歡迎連線本伺服器");
29         System.out.println("伺服器執行結束");
30     }

客戶端接收伺服器傳來的訊息

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.io.InputStreamReader;
 5 import java.net.Socket;
 6 
 7 public class Test02 {
 8     /**
 9      * 我是客戶端
10      */
11     public static void main(String[] args) throws IOException {
12         //建立客戶端物件
13         Socket socket = new Socket("localhost", 10008);
14         /**
15          * 接收來自伺服器的訊息
16          */
17         //1.建立輸入流
18         InputStream ps = socket.getInputStream();
19         //2.採用一次讀一句
20         BufferedReader br = new BufferedReader(new InputStreamReader(ps));
21         String text = br.readLine();
22         System.out.println(text);
23     }
24 }

重點:伺服器與客戶端的交流是互相的,必須一次輸出對應一個輸入,這樣才不會卡死。

6.在伺服器中新增多執行緒

6.1)一個伺服器肯定是要連線很多客戶端的,這個時候需要在迴圈中建立一個子執行緒,來執行每個客戶端與伺服器的連線。

6.2)程式碼演示:(再次強調,客戶端和服務端的輸入輸出是交叉的一個輸入對應一個輸出,不然會執行緒卡死)

 1 import java.io.OutputStream;
 2 import java.io.PrintStream;
 3 import java.net.ServerSocket;
 4 import java.net.Socket;
 5 
 6 public class Test01 {
 7     /**
 8      * 我是伺服器
 9      *
10      * @param args
11      */
12     public static void main(String[] args) throws IOException {
13         //搭建伺服器
14         ServerSocket serversocket = new ServerSocket(10008);
15         while (true) {
16             //等待客戶端連線
17             Socket socket = serversocket.accept();
18             //客戶端連線後就建立一個執行緒,讓他同該客戶端交流
19             new Thread() {
20                 @Override
21                 public void run() {
22                     try {
23                         //1.建立輸出流
24                         OutputStream outputStream = socket.getOutputStream();
25                         //2.將輸出流轉換為列印流
26                         PrintStream ps = new PrintStream(outputStream);
27                         ps.println("客戶端,你好呀");
28                     } catch (IOException e) {
29                         e.printStackTrace();
30                     }
31 
32                 }
33             }.start();
34         }
35     }
36 }

7.

8.

總結:

網路程式設計只要是TCP協議,主流,其他的很少用,要用的時候在看下吧。

加油吧!