這一章節我們學習網絡編程
image.png
image.png
首先來看張圖
image.png
image.png
瀏覽器連接我們的網站服務器(apache) 為應用層協議 其中瀏覽器和web服務器之間的交互就是應用層
本章我們以應用層作為背景進行學習(底層協議暫時不學)
應用層協議特征
image.png
接下來我們用代碼演示一下
image.png
創建一個socket之間的連接 上圖左邊為服務端 右邊為客戶端 兩邊都要有socket(電話)
socket之間連接之后 要有數據的交互 僅僅是連接 沒有交互應答是沒什么用的
下面我們先看一下簡單的明文字符串時如何交互的
image.png
接下來創建兩個類 里面分別有一個入口函數
目錄如下
image.png
等一會我們會分別啟動這兩個入口函數 變成兩個程序
MyServer代碼
image.png
MyClient代碼
image.png
運行結果
image.png
先運行MyServer可以看見程序運行時卡住不動了 等待客戶端進行連接呢
在運行MyClient
image.png
可以看見Client連接成功后很快運行結束了
在看MyClient的運行結果
image.png
讀取到了客戶端的數據并且運行也結束了 (因為我們在代碼中手動連接完關閉了socket)
接下來我們理解幾個問題
image.png
寫一段測試代碼
測是下字節類型數組如何和字母 字符串 中文 進行對應
在MyServer中寫入
image.png
運行結果
image.png
我們在讀取一些文檔,數據之間進行網絡傳輸等都是通過字節方式進行傳輸
為什么我們一開始讀取字節數寫成200呢?
因為傳輸過程中可能由于網速的原因 讀取不了過大的字節數
下面我們理解一下字節的另一個用法
我們將讀取字節改為每次讀取3個字節MyServer中如下
image.png
將MyClient中發送內容改一下
image.png
注意你好后面的逗號是英文的,只占一個字節 由于默認是utf8格式 一個中文占3個字節 每次讀取是每3個字節讀取一下的
運行結果
image.png
可以看見逗號后面的內容顯示不出來 是因為逗號只占一個字節 后面的文字都是3個字節的 前面的你好也都是三個字節的
所以后面的文字由于前面逗號占了一個字節所以輸出有問題
接下來引出一個知識點
上面的代碼中,我們使用到了InputStream等 stream中文意思為流
image.png
字節流 一般用于傳輸圖像等 字符流一般用于傳輸純文本