JAVA基礎知識點21-網路程式設計、IP、埠、統一資源定位符(URL)、協議、套接字、UDP、反射
阿新 • • 發佈:2020-12-11
技術標籤: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方法,建立物件的時候指定呼叫當前的 構造器為物件初始化資訊