1. 程式人生 > 實用技巧 >網路程式設計簡介

網路程式設計簡介

網路程式設計

1.1、概述

地球村:住在廣東的人們,住在美國的人們。

計算機網路:

計算機網路是指將地理位置不同的具有獨立功能的多臺計算機及其外部裝置,通過通訊線路連線起來,在網路作業系統網路管理軟體網路通訊協議的管理和協調下,實現資源共享和資訊傳遞的計算機系統。

網路程式設計的目的:

無線電臺,傳播交流資訊,資料交換,通訊

網路程式設計要達到的目的:

  1. 如何準確地定為網路上的一臺主機:埠號,定為到這個計算機上的某個資源。
  2. 找到了這個主機,如何傳輸資料?

Javaweb:網頁程式設計 B/S

網路程式設計:TCP/IP C/S

1.2、 網路通訊的要素

人工智慧:智慧汽車:工廠、人少

如何實現網路的通訊?

通訊雙方的地址:

  • IP
  • 埠號
  • 192.168.16.124:5900

規則:網路通訊的協議

TCP/IP參考模型:

小結:

  1. 網路程式設計中有兩個主要的問題
    • 如何準確的定位到網路上的一臺或者多臺主機
    • 找到主機之後如何通訊
  2. 網路程式設計中的要素
    • IP和埠號
    • 網路通訊協議
  3. 萬物皆物件

1.3、IP

IP地址:inetaddress

  • 唯一定位一臺網路上計算機

  • 127.0.0.1:本機localhost

  • IP地址的分類

    • ipv4/ipv6

      • ipv4:127.0.0.1,4個位元組組成。0~255,42億;30億都在北美,亞洲4億,2011年就用盡
      • ipv6:128為,8個無符號整數!abcde
    • 公網(網際網路)/私網(區域網)

      • ABCD四類

      • 192.168.···,區域網,專門給組織內部使用

  • 域名:記憶IP問題

    • IP:好的域名價值高

      package com.liumang.lesson01;
      //測試IP
      
      import java.net.InetAddress;
      import java.net.UnknownHostException;
      
      /**
       * @author LiuXingWu
       * @create 2020-08-14 11:05
       */
      public class TestInetAddress {
          public static void main(String[] args) {
              try {
                  //查詢本機IP
                  InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");
                  System.out.println(inetAddress1);
                  InetAddress inetAddress2 = InetAddress.getLocalHost();
                  System.out.println(inetAddress2);
                  InetAddress inetAddress3 = InetAddress.getByName("localhost");
                  System.out.println(inetAddress3);
      
      //            查詢網站IP地址
                  InetAddress inetAddress5 = InetAddress.getByName("www.baidu.com");
                  System.out.println(inetAddress5);
      
                  //常用方法
                  System.out.println(inetAddress5.getAddress());//地址
                  System.out.println(inetAddress5.getCanonicalHostName());//規範的名字
                  System.out.println(inetAddress5.getHostAddress());//ip
                  System.out.println(inetAddress5.getHostName());//域名,或自己主機的名字
              } catch (UnknownHostException e) {
                  e.printStackTrace();
              }
      
          }
      }
      

1.4、埠

埠表示計算機上的一個程式的程序

  • 不同的程序有不同的埠號,埠號不能衝突用來區分軟體!

  • 被規定0~65535

  • TCP,UDP:65535 * 2 。TCP:80,UDP:80, 單個協議下,埠號不能衝突

  • 埠分類

    • 公有埠0~1023

      • HTTP:80
      • HTTPS:443
      • FTP:21
      • Telent:23
    • 程式註冊埠:1024~49151,分配使用者或者程式

      • Tomcat:8080
      • MySQL:3306
      • Cracle:1521
    • 動態、私有:49152~65535

      netstat -ano # 檢視所有的埠
      netstat -ano|findetr "5900"# 檢視指定的埠
      tasklist|findetr"8696"#檢視指定埠的程序
      Ctrl + shift + ESC #    
      
    • package com.liumang.lesson01;
      
      import java.net.InetSocketAddress;
      
      /**
       * @author LiuXingWu
       * @create 2020-08-14 17:58
       */
      public class TestInetSocketAddress {
      
          public static void main(String[] args) {
              InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);
              InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 8080);
              System.out.println(socketAddress);
              System.out.println(socketAddress2);
      
              System.out.println(socketAddress.getAddress());
              System.out.println(socketAddress.getHostName());//地址
              System.out.println(socketAddress.getPort());//埠
          }
      }
      

1.5、通訊協議

協議:約定

網路通訊協議:速率,傳輸位元速率,程式碼結構,傳輸控制···

問題:複雜

大事化小:分層

TCP/IP協議簇

重要

  • TCP:使用者傳輸協議
  • UDP:使用者資料協議

出名的協議

TCP、UDP對比

TCP:打電話

  • 連線,穩定

  • “三次握手,四次揮手”

  • 最少需要三次,保證穩定連線
    A:你愁啥?
    B:瞅你咋地?
    A:幹一場!
    
    A:我要走了
    B:你真的要走了嗎?
    B:你真的真的要走了嗎?
    A:我真的要走了
    
    
  • 客戶端、服務端

  • 傳輸完成,釋放連線,效率低

UDP:發簡訊

  • 不連線,不穩定
  • 客戶端、服務端:沒有明確的界限
  • 不管有沒有準備好,都可以發給你···
  • 類比導彈
  • DDoS:洪水攻擊(飽和攻擊)

1.6、TCP

客戶端

  1. 連線伺服器Socket
  2. 傳送訊息

伺服器

  1. 建立服務的埠ServerSocket
  2. 等待使用者的連線accept
  3. 接收使用者的資訊