1. 程式人生 > 其它 >JAVA基礎知識點21-網路程式設計、IP、埠、統一資源定位符(URL)、協議、套接字、UDP、反射

JAVA基礎知識點21-網路程式設計、IP、埠、統一資源定位符(URL)、協議、套接字、UDP、反射

技術標籤:Javase基礎知識點java反射網路socket

IP、埠:

IP: 定義節點
   IPV4 : 4個位元組  32位
   IPV6 : 8個位元組
   192.168.0.0~192.168.255.255 供組織內部使用的IP
   127.0.0.1 本地IP
   localhost 本地

   IP 與 域名:
   DNS|域名解析器

   InetAddress


埠:區分軟體
   2個位元組 0~65535之間的整數表示埠號
   8000的埠號為預留埠號
   常見的埠號:
       80: http
       8080: tomcat
       3306: mysql
       1521: oracle

    同一協議下埠號不能衝突

    InetSocketAddress :  此類實現IP套接字地址(IP地址+埠號)它也可以是一對(主機名+埠號),


URL:統一資源定位符
協議: 合同 規範

統一資源定位符(URL):

URL : 統一資源定位符
     網際網路的三大基石:  http  html  url

http://www.baidu.com:80/index.html?username=zhangsan&password=123#a
    URL 的組成:
        協議:http
        域名:/www.baidu.com
        埠號: 預設80
        訪問的資源:index.html
        請求引數:username=zhangsan&password=123
        錨鏈接..a

    URL : 類URL表示統一資源定位符,指向全球資訊網上的“資源”的指標。
public class URLDemo02 {
    public static void main(String[] args) throws MalformedURLException {

        //URL(String spec) 從 String表示建立 URL物件。
        //URL(String protocol, String host, int port, String file) 建立 URL從指定物件 protocol , host , port號和 file 。
        URL url = new URL("http://www.baidu.com:80/haha/index.html?username=zhangsan&password=123#a");
        System.out.println(url);

        System.out.println("協議:"+url.getProtocol());
        System.out.println("域名"+url.getHost());
        System.out.println("埠"+url.getPort());
        System.out.println("訪問資源"+url.getFile());
        System.out.println("訪問資源"+url.getPath());
        System.out.println("請求引數"+url.getQuery());
        System.out.println("錨點:"+url.getRef());
    }
}

執行截圖:

協議、套接字:

協議:
    傳輸層協議: UDP TCP
    UDP : 寫信|郵遞包裹  非面向連線   不安全  協議簡單,開銷小效率高   只管寫只管傳送  一般不超過60k
    TCP : 打電話  面向連線  安全  協議複雜,效率低  基於3此握手  沒有大小限制的

SOCKET 套接字
    相當於傳輸層為應用層開闢小口子
    通過套接字進行傳輸資料
    不同協議下Socket實現不同
    面向Socket程式設計

    DatagramSocket   定義傳送端|接收端
    DatagramPacket   打包

UDP 實現基本流程:-->傳送端
    傳送端與接收端兩端是平等的,資料基於位元組陣列傳輸

1.定義傳送端 DatagramSocket(int port)
2.準備資料
3.打包
4.傳送  send(DatagramPacket)
5.關閉
public class UDPDemo04 {
    public static void main(String[] args) throws IOException {
        System.out.println("-----------------傳送端------------------");
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入要傳送的內容:");
        String s = sc.next();
        //1.定義傳送端 DatagramSocket(int port)
        DatagramSocket send = new DatagramSocket(8888);
        //2.準備資料
        byte[] arr = s.getBytes();
        //3.打包
        //DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
        DatagramPacket packet = new DatagramPacket(arr,0,arr.length,new InetSocketAddress("localhost",9999));
        //4.傳送  send(DatagramPacket)
        send.send(packet);
        //5.關閉
        send.close();
    }
}

UDP:

UDP 實現基本流程:-->接收端

1.定義接收端 DatagramSocket(int port)
2.打包準備接收資料
3.接收 receive(DatagramPacket)
4.處理資料
5.關閉
public class UDPDemo05 {
    public static void main(String[] args) throws Exception{
        System.out.println("-----------------接收端------------------");
        OutputStream os = new BufferedOutputStream(new FileOutputStream("D:/001.txt"));
        //1.定義接收端 DatagramSocket(int port)
        DatagramSocket rec = new DatagramSocket(9999);
        //2.打包準備接收資料
         byte[] arr = new byte[1024];
         //接收資料的包裹
        DatagramPacket packet = new DatagramPacket(arr,0,arr.length);
        //3.接收 receive(DatagramPacket)
        rec.receive(packet);

        //4.處理資料
         byte[] datas = packet.getData();
         int len = packet.getLength();
        System.out.println("接收資料個數"+len);
        System.out.println("接收資料"+datas.length);
        System.out.println(new String(datas,0,len));

        //5.關閉
        rec.close();

    }
}

反射:

反射:
    JAVA有著一個非常突出的動態相關機制:Reflection。

    Java反射機制,可以實現以下功能:
        ①在執行時判斷任意一個物件所屬的類;
        ②在執行時構造任意一個類的物件;
        ③在執行時判斷任意一個類所具有的成員變數和方法;
        ④在執行時呼叫任意一個物件的方法;
        ⑤生成動態代理;

    反射的源頭:
        Class物件用來表示任意一個正在執行期間的java類或者介面
        Class物件是不需要手動建立,在類載入到記憶體之後就存在的jvm構建的
        Class物件是唯一的,不會變的,不需要手動建立的
        Class物件中包含著這個類的所有內容
        如果能夠獲取一個型別的Class物件,就能夠做任何事情!!!!

    注意: 發生在程式執行期間的行為
如何獲取反射的源頭:
            1.類名.class
            2.Class.forName(許可權定名)  -->推薦
            3.物件.getClass()
獲取構造器

構造器<T> getConstructor(類<?>... parameterTypes) 返回一個 構造器物件,該物件反映此 類物件所表示的類的指定公共建構函式。
構造器<?>[] getConstructors() 返回一個包含 構造器物件的陣列, 構造器物件反映了此 類物件所表示的類的所有公共建構函式。
構造器<T> getDeclaredConstructor(類<?>... parameterTypes) 返回一個 構造器物件,該物件反映此 類物件所表示的類或介面的指定建構函式。
構造器<?>[] getDeclaredConstructors() 返回 構造器物件的陣列, 構造器物件反映由此 類物件表示的類宣告的所有建構函式。

建立物件
    1.通過Class類的newInstance呼叫某一個型別的空構造為物件出現初始化資訊建立物件  -->棄用
    2.呼叫構造器型別的newInstance方法,建立物件的時候指定呼叫當前的 構造器為物件初始化資訊