zoukankan      html  css  js  c++  java
  • 【Android 应用开发】Android 网络编程 API笔记



    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

    -- 作用 : 获取网络链接验证对象;

    -- 使用方法 : 当须要获取一个带 口令 保护的文件的时候, 须要使用 username 和 password 才干获取该文件的输入流, 假设遇到这样的情况, 提示用户输入username password获取文件;


    使用流程

    1> 获取usernamepassword

    关键方法

    protected PasswordAuthentication getPasswordAuthentication()
    -- 重写方法 : 重写该方法, 在该方法中调用 该类中的其他方法, 获取关于请求验证的信息; 

    -- 用户输入 : 然后写一个 usernamepassword输入框, 弹出该输入框, 通过用户输入获取usernamepassword;

    -- 返回结果 : 依据用户输入的 口令 password 以及上面获取的请求验证信息, 返回 PasswordAuthentication 对象;


    2> 验证


    验证流程 :
    -- 注冊验证类实例 : 调用 setDefault(Authenticator) 方法向系统注冊实例;
    -- 验证 : 调用 requestPasswordAuthentication()方法;

    public static void setDefault(Authenticator a)
    -- 作用 : 设置 代理 或者 HTTPserver 请求校验时 password使用的 authenticator; 


    	public static PasswordAuthentication requestPasswordAuthentication(InetAddress addr,
                int port,
                String protocol,
                String prompt,
                String scheme)
    -- 作用 : 要求向系统注冊的 authemticator 提供password;

    -- 參数 : addr 请求授权网站的 InetAddress, port 请求链接port, protocol 请求连接的协议, prompt 用户提示的字符串, scheme 验证方案;



    2. PasswordAuthentication


    类的全名称 : 

    public final class PasswordAuthentication extends Object
    -- 作用 : 该类保存 Authenticator 使用的 username 和 password;


    构造方法

    public PasswordAuthentication(String userName, char[] password)
    -- 使用方法 : 依据传入的username 和 password创建 PasswordAuthentication 对象;


    获取用usernamepassword的方法

    -- 获取username方法 : public String getUserName() ;

    -- 获取password方法 : public char[] getPassword() ;



    3. NetPermission


    类的全名称

    public final class NetPermission extends BasicPermission
    -- 作用 : 用于各种网络权限, 包括一个名称, 没有动作列表;


    权限解析 : 每一个权限都有一个权限名称, 所同意的操作, 以及相应的风险;

    -- setDefaultAuthenticator : 设置代理 或 HTTP server请求验证, 获取验证信息的方式;

    -- requestPasswordAuthentication : 设置 在系统中注冊的 authenticator 能够提供password;

    -- 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 地址 或者 通配符地址, server主机有多个接口的情况下接收不论什么接口上的client链接;


    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地址 和 port号, 用于让套接字进行 绑定 连接 或者当作返回值;


    使用方法二 : 主机名 + port号, 尝试解析主机名, 假设解析失败, 该地址被标记为 未解析地址;


    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
    -- 作用 : client的套接字;


    套接字工作原理 : 套接字的实际工作由 SocketImpl 类实例运行, 能够更改 SocketImplFactory 进行配置, 创建适合本地防火墙的套接字;


    可进行的操作 : 绑定本地地址, 链接server, 获取输入输出流, 设置选项, 获取套接字的状态;


    2. SocketImpl


    类的全名称

    public abstract class SocketImpl extends Object implements SocketOptions
    -- 作用 : 该抽象类是实现套接字的全部类的通用超类, 创建client 和 server套接字都能够使用该超类;


    3. ServerSocket


    类的全名称

    public class ServerSocket extends Object
    -- 作用 : server套接字;


    工作流程 : 该server套接字 等待 client请求传入, 依据client的各种请求做某些操作;


    原理 : server套接字的实际操作由 SocketImpl 对象运行;


    创建适合本地防火墙的套接字 : 在应用程序中, 更改 创建 SocketImpl 的 SocketImplFactory 来配置 套接字;


    4. MulticastSocket


    类的全名称

    public class MulticastSocket extends DatagramSocket
    -- 作用 : 用于 发送 和 接收 IP 多播包;

    特点 : MulticastSocket 是一种 DatagramSocket, 比一般的 DatagramSocket 多出一个功能, 具有增加Internet 上其他多播主机组的功能;

    多播组指定 : 多播组通过 D 类 IP地址, 和 标准 UDP port号指定; 



    ,

  • 相关阅读:
    使用TransactionScope实现多数据库连接事务操作
    zabbix_agentlinux下的安装
    (转)Zabbix AgentWindows平台配置指导
    使用SpringSide 3.1.4.3开发Web项目的全过程(上)
    应用开发中数据字典项设计实现方案
    Oracle Top N 和 Oracle中的limit问题解决方案
    Struts 2.0的codebehinde插件应用简述
    PropertyUtils和MethodUtils使用
    Log4j基本使用方法
    Quartz从入门到进阶
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6957279.html
Copyright © 2011-2022 走看看