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 端口号指定;

,

【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介的更多相关文章

  1. Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  2. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  3. Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  4. 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法

    网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) ​ 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...

  5. [Android应用开发] 03.网络编程

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  7. Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socke ...

  8. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  9. Java网络编程:利用Java mail包发送电子邮件

    下面代码是利用Java mail包封装了一个发送邮件的类 import java.io.File; import java.util.ArrayList; import java.util.Date; ...

随机推荐

  1. Linux下查看进程打开的文件句柄数

    ---查看系统默认的最大文件句柄数,系统默认是1024 # ulimit -n ----查看当前进程打开了多少句柄数 # lsof -n|awk '{print $2}'|sort|uniq -c|s ...

  2. C/C++知识大纲(只有作者看得懂的笔记)

    c标准库部分冷门函数. stdio.h char buf[256]; sscanf(buf,"%s",&buf); sprintf(buf,"Name: %s&q ...

  3. ng-book札记——HTTP

    Angular拥有自己的HTTP库,可以用于调用外部API. 在JavaScript世界里有三种方式可以实现异步请求,Callback,Promise与Observable.Angular倾向于使用O ...

  4. RDO Stack: Install newton in the dashboard can't create images

    Issue: When you want to create an image in RDO stack newton version, you may encounter following err ...

  5. 计算机网络之远程终端协议TELNET

    TELNET 是一个简单的远程终端协议.用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址). TELNET 能将用户的击键传到远地主机 ...

  6. 理解性能的奥秘——应用程序中慢,SSMS中快(3)——不总是参数嗅探的错

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(2)--SQL Server如何编译存储过程 在我们开始深入研究如何处理 ...

  7. 18 UI美化自定义形状shape

    自定义某个控件的形状 如 圆角 巨型 环形 : 在工程文件的新建 res/drawable/shape文件(以下键一个圆角) <?xml version="1.0" enco ...

  8. 6.5、Android Studio的Android Device Monitor

    Android Device Monitor是一个独立的工具,可以对Android应用进行调试和分析.Android Device Monitor无需安装整合在一个IDE中,比如像Android St ...

  9. Java进阶(一)Java内存解析

    栈.堆.常量池等虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,简单讲解Java内存分配方面的知识. 首先我们先来讲解一下内存中的各个区域. stack(栈) ...

  10. UNIX环境高级编程——sigqueue、sigsuspend函数

    一.sigqueue函数 功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用. int sigqueue(pid_t pid, int sig, ...