JavaSE超詳細筆記-網絡編程篇-基于黑馬

1. 什么是網絡編程【理解】

  • 1.1 概念

    • 在網絡通信協議下,不同計算機上運行的程序,進行的數據傳輸。
  • 應用場景:
    • 即時通信、網游對戰、金融證券、國際貿易、郵件、等等。
  • 不管是什么場景,都是計算機計算機之間通過網絡進行數據傳輸
  • Java中可以使用java.net包下的技術輕松開發出常見的網絡應用程序

1.2 常見的軟件架構

  • 1.21 C/S
    • C/S全稱:Client/Server(客戶端/服務器)
    • 采取該架構的軟件,需要在用戶本地需要下載并安裝客戶端程序,在遠程有一個服務器端程序[例如:QQ,Steam]
  • 1.22 B/S
    • B/S全稱:Browser/Server (瀏覽器/服務器)
    • 采取該架構的軟件,只需要一個瀏覽器,用戶通過不同的網址。客戶訪問不同的服務器[例如:京東,淘寶]
  • 1.23 C/S,B/S的選擇(優缺點)
    • 總結:CS適合專業化的辦公軟件,BS適合移動互聯網應用
    • C/S
      • 優點
        • 畫面可以做的非常精美,用戶體驗好
      • 缺點
        • 用戶需要下載和更新的時候比較麻煩
        • 需要開發客戶端,也需要開發服務端
    • B/S
      • 所有的通過服務器訪問的其實都是bs架構,如網頁游戲,購物商城? ?。
      • 優點[方便]
        • 不需要開發客戶端,只需要頁面+服務端
        • 用戶不需要下載,打開瀏覽器就能用
      • 缺點
        • 如果應用過大,用戶體驗受到影響

2. 網絡編程三要素【理解】

  • 2.1 三要素簡單概況

    • IP地址

      • 設備在網絡中的地址,是唯一的標識

    • 端口

      • 應用程序在設備中唯一的標識

    • 協議

      • 數據在網絡中傳輸的規則,常見的協議由UDP、TCP、http、https、ftp。

  • 2.2 IP

    • 2.21 概念
      • 全稱:Internet Protocol,是互聯網協議地址,也稱IP地址。是分配給上網設備的數字標簽。
      • 通俗理解:上網設備在網絡中的地址,是唯一的。
    • 2.22 常見的IP分類??????
      • IP地址分為兩大類
        • IPv4:全稱Internet Protocol version 4,互聯網通信協議第四版
          • 采用32位地址長度,分為4組
            • 例如一個采用二進制形式的IP地址是“11000000 10101000 00000001 01000010”
            • 為了方便使用,IP地址經常被寫成十進制的形式,中間使用符號“.”分隔不同的字節。于是,上面的IP地址可以表示為“192.168.1.66”。IP地址的這種表示法叫做“點分十進制表示法”,這顯然比1和0容易記憶得多
          • 缺點:ip地址不夠用,僅有不到43億,于是誕生了IPv6
        • IPv6【了解:全稱Internet Protocal version 6,互聯網通信協議第六版。
          • 采用128位地址長度,分成8組
          • 這里就不舉例子了,可以參考IPv4的IP地址,不過為8組,也因此有2的128次方的ip地址
          • 為了方便使用,IPv6使用冒分十六進制表示法,將上面每一組轉為十六進制,并用冒號分隔。如2001:0DB8:0000:0023:0008:0800:200C:417A,因為比較長的原因,故把每一組前面的零進行省略,記錄成2001:DB8:0:23:8:800:200C:417A
          • 特殊情況:如果計算出的16進制里面有很多連續的0,可以使用0位壓縮表示法,如FF01:0:0:0:0:0:0:1101可以轉為FF01::1101
    • 2.23 IPv4的地址分類形式
      • 主要分為公網地址(萬維網使用) 和 私有地址(局域網使用)
      • 私有地址
        • 192.168.開頭的就是私有地址,范圍即為192.168.0.0--192.168.255.255,專門為組織機構內部使用,以此節省IP
      • 特殊IP地址
        • 127.0.0.1,也可以是localhost:是回送地址,也稱本地回環地址,也稱本機IP,永遠只會尋找當前所在本機。
      • 常見的CMD命令
        • ipconfig:查看本機IP地址
        • ping:檢查網絡是否連通
    • 2.24 InetAddress的使用
      • 概況:此類表示Internet協議(IP)地址
      • 相關方法

        方法名說明
        static InetAddress getByName(String host)確定主機名稱的IP地址。主機名稱可以是機器名稱,也可以是IP地址
        String getHostName()獲取此IP地址的主機名
        String getHostAddress()返回文本顯示中的IP地址字符串
public class MyInetAddress {public static void main(String[] args) throws UnknownHostException {//IP的對象,看作為電腦的對象InetAddress address = InetAddress.getByName("LAPTOP-BPH5T8C9");InetAddress address1 = InetAddress.getByName("127.0.0.1");System.out.println(address);System.out.println(address1);String name = address.getHostAddress();System.out.println(name);String ip=address.getHostAddress();System.out.println(ip);}
}
  • 2.3 端口號

    • 概念:應用程序在設備中唯一的標識
    • 端口號:
      • 由兩個字節表示的整數,取值范圍:0~65535
      • 其中0~1023之間的端口號用于一些知名的網絡服務或者應用
      • 我們使用1024以上的端口號就可以了。
    • 注意:一個端口號只能被一個應用程序使用
  • 2.4 協議

    • 2.41 主要概念:
      • 計算機網絡中,連接和通信的規則被稱為網絡通信協議
      • OSI參考模型:世界互聯協議標準,全球通信規范,單模型過于理想化,未能在因特網上進行廣泛推廣
      • TCP/IP參考模型(或TCP/IP協議):事實上的國際標準
      • 我們本次主要學習UDP協議和TCP協議
    • 2.42 UDP與TCP協議的簡單概括
      • UDP協議
        • UDP是面向無連接通信協議
        • 特點
          • 用戶數據報協議
          • 速度快,有大小限制,一次最多發送64K,數據不安全,易丟失數據
        • 應用場景
          • 網絡會議
          • 語音通話
          • 在線視頻
      • TCP協議
        • TCP是面向連接的通信協議
        • 特點
          • 速度慢
          • 沒有大小限制
          • 數據安全
        • 應用場景
          • 下載軟件
          • 文字聊天
          • 發送郵件

3. UDP通信程序

  • 3.1 UDP通信程序步驟(發送數據)
    • 發送數據的步驟(右邊是將其理解為寄東西的理解)

      • 創建發送端的Socket對象(DatagramSocket)? ? ? ? ? ? ? ? ? ? ? ? 找快遞公司

      • 創建數據,并把數據打包? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 打包禮物

      • 調用DatagramSocket對象的方法發送數據? ? ? ? ? ? ? ? ? ? ? ? ? ?快遞公司發送包裹?

      • 關閉發送端? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?付錢走人

  • 3.2 UDP發送方法
  • 構造方法

    方法名說明
    DatagramSocket()創建數據報套接字并將其綁定到本機地址上的任何可用端口
    DatagramPacket(byte[] buf,int len,InetAddress add,int port)創建數據包,發送長度為len的數據包到指定主機的指定端口
  • 相關方法

    方法名說明
    void send(DatagramPacket p)發送數據報包
    void close()關閉數據報套接字
    void receive(DatagramPacket p)從此套接字接受數據報包

? ? ? ? ? ? ? ?

    public static void main(String[] args) throws IOException {//創建DatagramSocket對象DatagramSocket ds= new DatagramSocket();//打包數據String str="數據傳輸中ing";byte[] bytes=str.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");int port=10086;DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);//發送數據ds.send(dp);//釋放資源ds.close();}
  • 細節:
    • 綁定端口,我們以后就是通過這個端口往外發送
    • 空參:所有可用的端口隨機一個進行使用
    • 有參:指定端口號進行綁定
  • 3.3 UDP通信程序步驟(接收數據)
    • 接收數據的步驟(右邊是將其理解為收東西的理解)
      • 創建接收端的DatagramSocket對象? ? ? ? ? ? ? ? 找快遞公司
      • 接受打包好的數據? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?接收箱子
      • 解析數據包? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 從箱子里面獲取禮物
      • 釋放資源? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 簽收走人
  • 3.4 UDP接收方法
  • 構造方法

    方法名說明
    DatagramPacket(byte[] buf, int len)創建一個DatagramPacket用于接收長度為len的數據包
  • 相關方法

    方法名說明
    byte[] getData()返回數據緩沖區
    int getLength()返回要發送的數據的長度或接收的數據的長度
    public static void main(String[] args) throws IOException {//細節://在接收的時候,一定要綁定端口//而且綁定的端口一定要跟發送的端口保持一致//創建DatagramSocket對象DatagramSocket ds=new DatagramSocket(10086);//接收數據包byte[] bytes=new byte[1024];DatagramPacket dp=new DatagramPacket(bytes,bytes.length);ds.receive(dp);//解析數據被byte[] data=dp.getData();int len = dp.getLength();InetAddress address = dp.getAddress();int port = dp.getPort();System.out.println("接收到數據"+new String(data,0,len));System.out.println("該數據是從"+address+"這臺電腦中的"+port+"這個端口發出的");//釋放資源ds.close();}
  • 細節:
  • 綁定端口,我們以后就是通過這個端口往外發送
  • 空參:所有可用的端口隨機一個進行使用
  • 有參:指定端口號進行綁定
  • receive方法是堵塞的,會一直等發送端發送信息
3.5 UDP的三種通信方式
  • 單播:一對一個,一個電腦作為發送端,只給一臺電腦發送數據
    • 上述的代碼就是單播
  • 組播:一對一組,一個電腦作為發送端,可給一組電腦發送數據
    • 組播地址:224.0.0.0~239.255.255.255
      • 其中224.0.0.0~224.0.0.255 為預留的組播地址
  • 廣播:一對一群,一個電腦作為發送端,可以給局域網中所有電腦發送數據
    • 廣播地址:255.255.255.255
// 發送端
public class ClinetDemo {public static void main(String[] args) throws IOException {// 1. 創建發送端的Socket對象(DatagramSocket)DatagramSocket ds = new DatagramSocket();String s = "hello 組播";byte[] bytes = s.getBytes();InetAddress address = InetAddress.getByName("224.0.1.0");int port = 10000;// 2. 創建數據,并把數據打包(DatagramPacket)DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);// 3. 調用DatagramSocket對象的方法發送數據(在單播中,這里是發給指定IP的電腦但是在組播當中,這里是發給組播地址)ds.send(dp);// 4. 釋放資源ds.close();}
}
// 接收端
public class ServerDemo {public static void main(String[] args) throws IOException {// 1. 創建接收端Socket對象(MulticastSocket)MulticastSocket ms = new MulticastSocket(10000);// 2. 創建一個箱子,用于接收數據DatagramPacket dp = new DatagramPacket(new byte[1024],1024);// 3. 把當前計算機綁定一個組播地址,表示添加到這一組中.ms.joinGroup(InetAddress.getByName("224.0.1.0"));// 4. 將數據接收到箱子中ms.receive(dp);// 5. 解析數據包,并打印數據byte[] data = dp.getData();int length = dp.getLength();System.out.println(new String(data,0,length));// 6. 釋放資源ms.close();}
}

運行效果

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/news/909445.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/news/909445.shtml
    英文地址,請注明出處:http://en.pswp.cn/news/909445.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    時序數據庫Influxdb3 core安裝

    本文介紹時序數據庫Influxdb3 core(開源版本)的安裝和簡單使用以及調優參數的介紹。 預期: 安裝時序數據庫Influxdb3 core 創建數據庫mydb 寫入數據; 使用influxdb3-cli 和 grafana2種方式查詢寫入的數據 前期準備: linux服務器(本文服…

    區間合并:區間合并問題

    區間合并:區間合并問題 區間合并 www.acwing.com/problem/content/805/ 按區間的左端點排序 掃描整個區間,在這過程中把可能有交點的區間合并 全包含:不做改動相交:right 后移相離:更新至下一個維護區間 import j…

    中國古代數學符號的演進 | 算籌 / 符號 / 算法

    注:本文為“中國古代數學符號”相關合輯。 圖片清晰度受引文原圖所限。 略作重排,未整理去重。 如有內容異常,請看原文。 這個中國古代的數學瑰寶,到底厲害在哪? 原創 朱一文 科普中國 2024 年 07 月 31 日 15:30 北…

    XMLDecoder、LDAP 注入與修復

    問題:XMLDecoder注入 針對 xml 解碼器的注入攻擊 反序列化用戶控制的 XML ,程序沒有進行驗證, 會讓攻擊者有機會在服務器上執行惡意代 碼。 例:下面代碼片段中, XMLDecoder 處理不可信的輸入。 ... XMLDecode…

    Unity 對象層級處理小結

    一.第一優先級Camera Culling Mask屬性指定Camera顯示的Layer,可以多選 Depth:Depth大的Camera顯示的Layer顯示在前面 二.避免使用PositionZ調整遮擋關系 在 2D 游戲中,雖然可以通過 Z 軸來調整顯示順序,但這與 2D 游戲的設計理念不符。在可以控制顯示層級的多個要素或方…

    python基礎舉例

    最近又重新開始學python,淺淺記錄下學習到的東西(也方便自己回顧看) 縮進、空格對于python很重要,一定要注意! 以下代碼是基于pycharm編寫的。 01 輸出 #注釋 # 單行注釋用# ,ctrl/是單行注釋的快捷鍵 # …

    開疆智能ModbusTCP轉Canopen網關連接匯川PLC配置案例

    本案例是通過開疆智能研發的ModbusTCP轉Canopen網關將匯川PLC與陀螺儀連接進行組網通訊。 準備階段 軟件:InoProShop(V1.7.3),CANopen Configuration Studio PLC:匯川AC801-0221-R0R0 網關:開疆智能ModbusTCP轉Canopen網關 陀…

    Tess4J:基于 Java 的 OCR 解決方案

    在現代軟件開發中,圖像識別與文本提取已成為許多應用場景中的關鍵環節。OCR(Optical Character Recognition) 技術使得從圖像中提取文字成為可能。Tess4J 是一個基于 Java 的 OCR 開發庫,它封裝了 Google Tesseract OCR 引擎的本地…

    Vue3 + JavaScript 父組件點擊按鈕觸發子組件事件方法

    在 Vue 3 中&#xff0c;父組件點擊按鈕觸發子組件事件有以下三種常用方式&#xff1a; 方法 1&#xff1a;使用 ref 直接調用子組件方法&#xff08;推薦&#xff09; vue 復制 下載 <!-- 父組件 --> <template><button click"callChildMethod"…

    超強人工智能解決方案套件InfiniSynapse:精準的業務理解、對各種數據源進行全模態聯合智能分析--部署安裝@Ubuntu22.04 @Docker

    InfiniSynapse 通過自研的第二代LLM-Native RAG實現了企業業務的理解&#xff0c;精準的Schema召回保證數據的準確性。提供專門為大模型優化的InfiniSQL語言&#xff0c;從而可以更加準確的生成查詢語句&#xff0c;通過 InfiniSQL 引擎讓人類第一次對存儲在各種數據源的全模態…

    解決國內無法加載谷歌驗證碼(reCAPTCHA):URL 重定向配置指南

    解決國內無法加載谷歌驗證碼&#xff08;reCAPTCHA&#xff09;&#xff1a;URL 重定向配置指南 在搭建網站或使用某些應用時&#xff0c;經常會遇到需要調用谷歌驗證&#xff08;reCAPTCHA&#xff09;API 的情況。然而&#xff0c;由于網絡環境的特殊性&#xff0c;國內多數…

    【Qt】如何使用QtInstallerFramework打包Qt程序

    使用 Qt Installer Framework 可以將你的 Qt 程序打包成一個帶有安裝向導的安裝包&#xff0c;適用于 Windows、Linux 和 macOS 平臺。以下是完整的打包流程&#xff0c;以你當前開發的 ecgexport 應用為例。 &#x1f9f0; 一、準備工作 1. 安裝 Qt Installer Framework 下載…

    如何編寫高效的Prompt:從入門到精通

    在人工智能時代&#xff0c;特別是隨著大型語言模型(LLM)如ChatGPT、Claude等的普及&#xff0c;編寫高質量的Prompt(提示詞)已成為一項關鍵技能。一個好的Prompt可以顯著提高AI輸出的質量和相關性&#xff0c;而一個糟糕的Prompt可能導致無用甚至誤導性的結果。本文將帶你深入…

    智慧工地云平臺源碼,基于微服務架構+Java+Spring Cloud +UniApp +MySql

    智慧工地管理云平臺系統&#xff0c;智慧工地全套源碼&#xff0c;java版智慧工地源碼&#xff0c;支持PC端、大屏端、移動端。 智慧工地聚焦建筑行業的市場需求&#xff0c;提供“平臺網絡終端”的整體解決方案&#xff0c;提供勞務管理、視頻管理、智能監測、綠色施工、安全管…

    【機械視覺】Halcon—【十三、實例找各個區域面積和中心點】

    找區域面積和中心點 *獲取圖像 read_image (Image, fabrik) *關閉窗口 dev_close_window () *打開窗口 dev_open_window (0, 0, 512, 512, black, WindowID) *設置輸出字體&#xff0c;14號字&#xff0c;Courier字體&#xff0c;粗體 set_display_font (WindowID, 14, mono, …

    MongoDB 基礎

    一、MongoDB 基礎概念 1. 什么是 MongoDB MongoDB 是一個文檔型數據庫&#xff0c;數據以類似 JSON 的文檔形式存儲&#xff0c;使用 BSON 格式。設計理念是應對大數據量1、高性能和靈活性需求。數據組織方式&#xff1a;數據庫→2集合→文檔&#xff0c;其中集合類似于關系型…

    RNN:從記憶困境到序列建模革命

    在自然語言處理的戰場上&#xff0c;一個句子中的每個單詞都承載著前文的記憶。當傳統神經網絡面對這種時序依賴束手無策時&#xff0c;循環神經網絡&#xff08;RNN&#xff09; 以獨特的循環結構開啟了序列建模的新紀元。它像人類閱讀般記憶上下文&#xff0c;卻也因記憶衰減…

    陽臺光伏配套電表ADL200N-CT/D16-Wf-1

    安科瑞 華楠 18706163979 引言 在“雙碳”目標推動下&#xff0c;綠色能源正逐步走進日常生活。陽臺光伏作為一種新型分布式發電方式&#xff0c;憑借靈活安裝、高效節能的特點&#xff0c;成為城市家庭和工商業用戶的新選擇。安科瑞推出的ADL200N-CT/D16-Wf-1陽光光伏電表&a…

    功能測試—軟件的生命周期

    市場需求調研 可行性研究 從企業的人力儲備、技術儲備、資金儲備等方面出發&#xff0c;論證經濟效益或者社會效益能否達到預期 項目立項 需求開發 輸出&#xff1a;需求規格說明書需求評審&#xff08;需求測試&#xff09;&#xff1a;測試&#xff08;測試負責人、資深測…

    PostgreSQL 日常維護

    目錄 前言 基本使用 1. 登錄數據庫 2. 數據庫操作 2.1 列出庫 2.2 創建庫 2.3 刪除庫 2.4 切換庫 2.5 查看庫大小 3. 數據表操作 3.1 列出表 3.2 創建表 3.3 復制表 3.4 刪除表 3.5 查看表結構 4. 模式操作命令 4.1 創建模式 4.2 默認模式 4.3 刪除模式 4.4…