1. 程式人生 > >JavaSE基礎(day21)(1)網路程式設計的常識 (2)基於tcp協議的程式設計模型(3)tcp協議和udp協議的比較 (4)基於udp協議的程式設計模型

JavaSE基礎(day21)(1)網路程式設計的常識 (2)基於tcp協議的程式設計模型(3)tcp協議和udp協議的比較 (4)基於udp協議的程式設計模型

默寫:
1.畫圖題
畫出所學IO流類之間的關係。

2.程式設計題
使用實現繼承的方式啟動一個執行緒,在該執行緒中每隔一秒列印一次當前系統時間,主執行緒等待5秒之後停止子執行緒。

今天內容:
(1)網路程式設計的常識
(2)基於tcp協議的程式設計模型
(3)tcp協議和udp協議的比較
(4)基於udp協議的程式設計模型

1.網路程式設計的常識(記住)
目前主流的網路通訊軟體有:QQ、微信、飛信、阿里旺旺、…

1.1 七層網路協議模型
為了資料安全可靠地傳遞到對方,ISO(國際標準委員會組織)將資料的傳遞從邏輯上劃分為以下七層:
應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層。
當傳送資料時需要按照上述七層協議一層層進行加包再發送出去。
當接收資料時需要按照上述七層協議相反的次序一層層進行拆分再顯示出來。

1.2 常用的協議
http協議 - 超文字傳輸協議,瀏覽網頁的功能需要使用該協議。
ftp協議 - 檔案傳輸控制,當上傳和下載檔案時需要使用該協議。
tcp協議 - 傳輸控制協議,當進行網路通訊時需要使用該協議。
udp協議 - 使用者資料報協議,當進行網路通訊時需要使用該協議。
ip協議 - 網際網路協議,是上述協議的底層協議。

協議 - 本質上就是一種規則/約定,規定了通訊雙方統一的語言規則。

1.3 IP地址(重點)
如:
192.168.1.1 - 是絕大多數路由器的登入地址。

IP地址就是網際網路中的唯一標識,本質上是由32位二進位制組成的整數,叫做ipv4,也有128位二進位制組成的整數,叫做ipv6,目前主流使用的是ipv4。
日常生活中採用點分十進位制表示法來進行IP地址的描述,也就是將每個位元組的二進位制轉換為一個十進位制整數,不同的十進位制整數之間採用.分隔。

如:
0x01020304 => 1.2.3.4

檢視IP地址的方式:
在windows系統的dos視窗中使用命令 ipconfig 即可檢視IP地址。
在linux系統的終端視窗中使用命令 ifconfig 即可檢視IP地址。

1.4 埠號(重點)
IP地址 - 可以定位到具體某一臺裝置中。
埠號 - 可以定位到裝置中的具體某一個程序。

埠號本質上就是由16位二進位制組成的整數,範圍是:0 ~ 65535,其中0 ~ 1024之間的埠號通常被系統佔用,因此程式設計時從1025開始使用。
網路程式設計中需要提供:IP地址 + 埠號。

2.基於TCP協議的程式設計模型(重點)
2.1 基本概念
C/S架構 - Client(客戶端)/Server(伺服器).
B/S架構 - Browser(瀏覽器)/Server(伺服器).
Socket - 本意為“插座”,在網路程式設計中主要指用於通訊的載體/通訊點。

2.2 程式設計模型
伺服器:
(1)建立ServerSocket物件,並提供埠號。
(2)等待客戶端的連線請求,使用accept()方法。
(3)得到Socket物件與客戶端使用輸入輸出流進行通訊。
(4)關閉Socket並釋放有關的資源。

客戶端:
(1)建立Socket物件,並提供伺服器的IP地址和埠號。
(2)使用輸入輸出流進行通訊。
(3)關閉Socket並釋放有關的資源。

2.3 相關類和方法的解析
(1)ServerSocket類
java.net.ServerSocket類用於準備伺服器端的套接字,也就是插座。
ServerSocket(int port) - 用於建立繫結到引數指定埠的套接字。
Socket accept() - 用於監聽並接收到此套接字的連線請求。
void close() - 用於關閉套接字。

(2)Socket類
java.net.Socket類用於實現客戶端套接字,是兩臺裝置之間通訊的端點。
Socket(String host, int port) - 用於建立套接字並連線到指定主機的指定埠上
InputStream getInputStream() - 用於返回套接字的輸入流。
OutputStream getOutputStream() - 用於返回套接字的輸出流。
void close() - 用於關閉套接字。

練習:
(1)要求實現伺服器向客戶端傳送字串內容"I received!".
(2)要求實現客戶端傳送的內容由使用者手動輸入,使用BufferedReader實現。
(3)要求實現客戶端和伺服器不斷地通訊,直到客戶端發來"bye"時結束。
(4)要求伺服器可以同時和多個客戶端通訊,採用多執行緒技術。

3.tcp協議和udp協議的比較(筆試題)
3.1 tcp協議
tcp協議 - 傳輸控制協議,是一種面向連線的協議,類似於打電話。
- 建立連線 => 進行通訊 => 斷開連線
- 在通訊的整個過程中全程保持連線。
- 保證了資料傳輸的可靠性和有序性。
- 是一種全雙工的位元組流通訊方式。
- 伺服器壓力比較大,資源消耗比較多,傳送資料的效率相對比較低。

3.2 udp協議
udp協議 - 使用者資料報協議,是一種非面向連線的協議,類似於寫信。
- 在通訊的整個過程中不保持全程連線。
- 不保證資料傳輸的可靠性和有序性。
- 是一種全雙工的資料報通訊方式。
- 伺服器壓力比較小,資源消耗比較少,傳送資料的效率相對比較高。

4.基於udp協議的程式設計模型(重點)
4.1 程式設計模型
主機A(接收方):
(1)建立DatagramSocket型別的物件,並準備埠號。
(2)建立DatagramPacket型別的物件,並準備緩衝區。
(3)接收資料內容,呼叫receive()方法。
(4)關閉Socket並釋放有關的資源。

主機B(傳送方)
(1)建立DatagramSocket型別的物件。
(2)建立DatagramPacket型別的物件,並準備資料和收件人資訊。
(3)傳送資料內容,呼叫send()方法。
(4)關閉Socket並釋放有關的資源。

4.2 相關類和方法的解析
(1)DatagramSocket類
java.net.DatagramSocket類用於描述傳送和接收資料報的套接字,相當於碼頭。
DatagramSocket() - 建立物件並繫結到任何可用的埠號上。
DatagramSocket(int port) - 建立物件並繫結到引數指定的埠上。
void receive(DatagramPacket p) - 用於接收資料報存放到引數指定的物件中。
void send(DatagramPacket p) - 用於將引數指定的物件傳送出去。
void close()

(2)DatagramPacket類
java.net.DatagramPacket類用於描述資料報資訊的包裹,相當於集裝箱。
DatagramPacket(byte[] buf, int length)
- 構造物件,用於接收長度為length的資料到buf陣列中儲存起來。
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
- 構造物件,用於將長度為length的資料傳送到address主機上的port埠。
InetAddress getAddress() - 用於獲取傳送方/接收方的IP地址資訊。
int getPort() - 用於獲取傳送方/接收方的埠號資訊。
int getLength() - 用於獲取傳送/接收的資料長度。

(3)InetAddress類
java.net.InetAddress類用於描述IP地址等資訊。
static InetAddress getLocalHost() - 用於返回本地主機的通訊地址。
static InetAddress getByName(String host)
- 用於根據引數指定的主機名來獲取該主機的通訊地址資訊。

視訊
javaseday21-網路程式設計的基本常識-01
https://v.qq.com/txp/iframe/player.html?vid=y0800nxzjga
javaseday21-基於tcp協議的程式設計模型-02
https://v.qq.com/txp/iframe/player.html?vid=q0800yp2aqs
javaseday21-tcp協議程式設計模型的使用-03
https://v.qq.com/txp/iframe/player.html?vid=u0801mpu6hh
javaseday21-tcp協議程式設計模型的一對多實現-04
https://v.qq.com/txp/iframe/player.html?vid=j0801dnv0hx
javaseday21-udp協議的程式設計模型和使用-05
https://v.qq.com/txp/iframe/player.html?vid=p0800hbr4gx

程式碼
https://pan.baidu.com/s/1o-Ouj9G55oRUFV_0mj5yng