【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 網絡編程相關的包 : 9 包, 20 接口, 103 類, 6 枚舉, 14異常;?
-- Java包 : java.net 包 (6接口, 34類, 2枚舉, 12異常);
-- Android包 :?android.net 包 (1接口, 19類, 3枚舉, 1異常), android.net.http 包 (6類), android.net.nsd 包 (3接口, 2類), android.net.rtp (4類), android.net.sip 包 (1接口, 9類, 1異常), android.net.wifi 包 (16類, 1枚舉), android.net.wifi.p2p 包 (9接口, 7類), android.net.wifi.p2p.nsd 包 (6類);
一. 權限相關類
1. Authenticator
類的全名稱?:?
public abstract class Authenticator extends Object-- 作用 : 獲取網絡鏈接驗證對象;
-- 使用方法 : 當需要獲取一個帶 口令 保護的文件的時候, 需要使用 用戶名 和 密碼 才能獲取該文件的輸入流, 如果遇到這種情況, 提示用戶輸入用戶名 密碼獲取文件;
使用流程
1> 獲取用戶名密碼
關鍵方法 :?
protected PasswordAuthentication getPasswordAuthentication()-- 重寫方法 : 重寫該方法, 在該方法中調用 該類中的其它方法, 獲取關于請求驗證的信息;?
-- 用戶輸入 : 然后寫一個 用戶名密碼輸入框, 彈出該輸入框, 通過用戶輸入獲取用戶名密碼;
-- 返回結果 : 根據用戶輸入的 口令 密碼 以及上面獲取的請求驗證信息, 返回 PasswordAuthentication 對象;
2> 驗證
驗證流程 : -- 注冊驗證類實例 : 調用 setDefault(Authenticator) 方法向系統注冊實例; -- 驗證 : 調用 requestPasswordAuthentication()方法;
public static void setDefault(Authenticator a)-- 作用 : 設置 代理 或者 HTTP服務器 請求校驗時 密碼使用的 authenticator;?
public static PasswordAuthentication requestPasswordAuthentication(InetAddress addr,int port,String protocol,String prompt,String scheme)-- 作用 : 要求向系統注冊的 authemticator 提供密碼;
-- 參數 : addr 請求授權站點的 InetAddress, port 請求鏈接端口, protocol 請求連接的協議, prompt 用戶提示的字符串, scheme 驗證方案;
2. PasswordAuthentication
類的全名稱?:?
public final class PasswordAuthentication extends Object -- 作用 : 該類保存 Authenticator 使用的 用戶名 和 密碼;構造方法 :?
public PasswordAuthentication(String userName, char[] password)-- 用法 : 根據傳入的用戶名 和 密碼創建 PasswordAuthentication 對象;
獲取用用戶名密碼的方法 :?
-- 獲取用戶名方法 :?public String getUserName() ;
-- 獲取密碼方法 :?public char[] getPassword() ;
3. NetPermission
類的全名稱 :?
public final class NetPermission extends BasicPermission-- 作用 : 用于各種網絡權限, 包含一個名稱, 沒有動作列表;
權限解析 : 每個權限都有一個權限名稱, 所允許的操作, 以及對應的風險;
-- setDefaultAuthenticator : 設置代理 或 HTTP 服務器請求驗證, 獲取驗證信息的方式;
-- requestPasswordAuthentication : 設置 在系統中注冊的 authenticator 可以提供密碼;
-- specifyStreamHandler : 構造 URL 時指定流處理程序;
-- setProxySelector : 設置 建立網絡連接時使用代理的 代理選擇器;
-- getProxySelector : 獲取 建立網絡連接時使用代理的 代理選擇器;
-- setCookieHandler : 設置 HTTP會話處理高度安全敏感的cookie 的 cookie 處理程序;
-- getCookieHandler : 獲取 HTTP會話處理高度安全敏感的cookie 的 cookie 處理程序;
-- setResponseCache : 設置 本地響應緩存的訪問權限;
-- getResponseCache : 獲取 本地響應緩存的訪問權限;
.
二. 地址相關類?
1. InetAddress
類的全名稱?:?
public class InetAddress extends Object implements Serializable作用 : 代表 IP 地址;
IP地址層級 : IP地址是一種低級的協議, UDP 和 TCP 都是在這個協議的基礎上構建;
IP地址類型 :?
-- 單播地址 : 用于當作單個接口標識符, 發送到單播地址的數據包 被發送到 由該地址標識的接口;
-- 多播地址 : 用于當作一組接口的標識符, 發送到多播地址的數據包被交付給由地址標識的所有接口;
-- 回送地址 : 分配給回送接口的地址, 發送到回送地址的任何內容, 都將當作本地主機的IP輸入, 通常在測試客戶機的時候使用這種類型的地址;
多播地址的注意事項 : 不能將多播地址分配給任何節點, 它是 anylocal 地址 或者 通配符地址, 服務器主機有多個接口的情況下接收任何接口上的客戶端鏈接;
IP地址范圍 :?
-- 鏈接本地地址 : 在單個鏈接上尋址, 以解決諸如自動地址配置, 鄰居發現, 或者沒有路由器的問題;?
-- 站點本地地址 : 不許要全局前綴時, 站點內部尋址;?
-- 全局地址 : Internet中唯一的地址;?
IP地址文本表現形式 : 有 IPv4 IPv6 兩種格式;
主機名解析 :?
-- 主機名到IP地址解析 : 使用 本地配置信息 和 網絡命名服務 實現, 特定命名服務默認情況下 是本地機器配置的;
-- 反向名稱解析 : 返回IP地址對應的主機名;
InetAddress 緩存 : 存儲 主機名解析, 不管成功還是失敗;
-- 默認緩存 : 正確解析的主機名 解析結果會永久保存, 如果解析失敗 該記錄只保存10秒;
-- 正主機名解析緩存 : 使用 networkaddress.cache.ttl 成功解析的緩存策略, 用于設置java安全屬性設置為另外的 TTL 值進行正緩存;
-- 負主機名解析緩存 : 使用 networkaddress.cache.negative.ttl 解析主機名失敗的緩存策略;
2. Inet4Address?
類的全名稱?:?
public final class Inet4Address extends InetAddress -- 作用 : 表示 IPv4 地址;
IP地址文本表示形式 :?
-- 指定4部分 : d.d.d.d , 每個部分都是一個字節數據, 從左到右 分配給 IPv4 四個字節;
-- 指定3部分 : d.d.d , 最后一部分是2個字節, 放在最右邊的網絡地址上;
-- 指定2部分 : d.d , 最后一部份是3個字節, 放在最右邊的三個字節上;
-- 指定1部分 : d , 直接存儲在網絡地址中, 字節不用重新排列;
多播地址范圍 : IPv4 生存時間 (Time-to-live) 作為多播范圍字段庫增加一倍;
-- TTL = 0 : 表示節點本地;
-- TTL = 1 : 表示鏈接本地;
-- TTL = 32 : 表示站點本地;
-- TTL = 64 : 表示地區本地;
-- TTL = 128 : 表示大陸本地;
-- TTL = 255 : 表示全球;
3. Inet6Address
類的全名稱 :?
public final class Inet6Address extends InetAddress -- 作用 : 代表 IPv6 地址;
(1) IPv6地址表示形式
1> 首選形式
x:x:x:x:x:x:x:x , 每個 x 都占 16 位地址段, x 是一個 16 進制的值, 如 8080:0:9:0:200:A12:100C:12 ;
2> 包含0位
零位產生 : 自動生成的 IPv6 地址, 經常包含 0 位的字符串;
0位壓縮 : 使用 "::" 壓縮 0 位, 如果連續出現多個 0 位, 可以使用 "::" 代替 8個字段中的 一個或者 多個 字段;
示例 :?8080:0:0:0:0:0:100C:12 , 可以壓縮為 8080:100C:12 , 中間的 5 位被壓縮了;
3> IPv4 和 IPv6 混合環境
混合環境替換形式 : x:x:x:x:x:x:d.d.d.d , 6 個 x 和 4 個 d, 一個 x 占 16位, 一個 d 占 8位;
映射 IPv4 的 IPv6 地址 : "::FFFF:192.168.1.1" 形式;
IPv4 兼容 IPv6 的地址 : "::192.168.1.1" 形式;
無效情況 : IPv4 必須是 d.d.d.d 格式的, 三位 或者 兩位 d 的格式無效;?
有效情況 : 一位 d 格式 ?"::FFFF:d" 有效;
4> 特殊 IPv6 地址
映射IPv4地址 : 格式 "::FFFF:d.d.d.d" , 這種類型的 IPv6 地址用于表示 IPv4 地址;?
IPv4 與 IPv6 節點通信 : 本機需要 使用 相同地址數據結構, 和 相同套接字;?
地址內部機制 : Java 中只有一種 IPv4 地址, 任何輸入的 IPv6 形式 或者 IPv4 地址映射的地址 都會被轉為 IPv4 地址形式;?
5> IPv6 范圍地址的文本表示形式
問題出現 : 鏈接本地 和 站點本地地址都是非全球的, 不同的主機 可能具有 相同的目標地址, 可能通過相同的始發系統上的不同接口到達;
解決方案 : 將始發系統連接到同一范圍的多個時區, 將 時區標識符(scope_id) ?添加到 IPv6 地址上;
指定scope_id格式 : IPv6-address%scope_id , IPv6 地址就是 x:x:x:x:x:x:x:x , scope_id 指的是本地接口, 如 eth0等;
scope_id 指定方式 :?
-- 數字標識符 : 必須是系統可以識別的特定接口 和 范圍的整數, 這些整數通過系統上的管理工具確定這些數字值;
-- 字符串標識 : 必須是 NetworkInterface.getName() 返回的確切字符串;
4. InetSocketAddress
類的全名稱 :?
public class InetSocketAddress extends SocketAddress-- 作用 : IP套接字地址, 包括 IP地址 和 端口號, 用于讓套接字進行 綁定 連接 或者當作返回值;
用法二 : 主機名 + 端口號, 嘗試解析主機名, 如果解析失敗, 該地址被標記為 未解析地址;
5. InterfaceAddress
類的全名稱 :?
public class InterfaceAddress extends Object-- 作用 : 表示網絡接口地址;
-- 對于 IPv4 地址 : IP地址, 子網掩碼, 廣播地址;
-- 對于 IPv6 地址 : IP地址, 網絡前綴長度;
6. SocketAddress
類的全名稱 :?
public abstract class SocketAddress extends Object implements Serializable-- 作用 : 這是一個不帶任何協議附件的 SocketAddress, 注意這是一個抽象類, 其子類應該是協議相關的;
7. NetworkInterface
類的全名稱 :?
public final class NetworkInterface extends Object-- 作用 : 由名稱 和 分配給此接口的IP地址列表組成的網絡接口, 用于標識加入多播組的本地接口; 接口名稱 "eth0", "wlan0" 等;
可以進行的操作 : 根據 IP地址 名稱 硬件地址 獲取網絡接口, 判斷網絡接口類型, 判斷網絡接口狀態, 對網絡接口進行一系列的操作;
三. 套接字相關類
1. ?Socket
類的全名稱 :?
public class Socket extends Object-- 作用 : 客戶端的套接字;
套接字工作原理 : 套接字的實際工作由 SocketImpl 類實例執行, 可以更改 SocketImplFactory 進行配置, 創建適合本地防火墻的套接字;
可進行的操作 : 綁定本地地址, 鏈接服務器, 獲取輸入輸出流, 設置選項, 獲取套接字的狀態;
2. SocketImpl
類的全名稱 :?
public abstract class SocketImpl extends Object implements SocketOptions-- 作用 : 該抽象類是實現套接字的所有類的通用超類, 創建客戶端 和 服務器套接字都可以使用該超類;
3. ServerSocket
類的全名稱 :?
public class ServerSocket extends Object -- 作用 : 服務器套接字;
工作流程 : 該服務器套接字 等待 客戶端請求傳入, 根據客戶端的各種請求做某些操作;
原理 : 服務器套接字的實際操作由 SocketImpl 對象執行;
創建適合本地防火墻的套接字 : 在應用程序中, 更改 創建 SocketImpl 的 SocketImplFactory 來配置 套接字;
4. MulticastSocket
類的全名稱 :?
public class MulticastSocket extends DatagramSocket -- 作用 : 用于 發送 和 接收 IP 多播包;特點 : MulticastSocket 是一種 DatagramSocket, 比一般的 DatagramSocket 多出一個功能, 具有加入Internet 上其它多播主機組的功能;
多播組指定 : 多播組通過 D 類 IP地址, 和 標準 UDP 端口號指定;?
,
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 应用开发】Androi
- 下一篇: 【Android 应用开发】Androi