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> 验证
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 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介的更多相关文章
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- Android 网络编程 API笔记 - java.net 包相关 接口 api
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socke ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- Java网络编程:利用Java mail包发送电子邮件
下面代码是利用Java mail包封装了一个发送邮件的类 import java.io.File; import java.util.ArrayList; import java.util.Date; ...
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...
- 网络编程(四)--基于udp协议的套接字、socketserver模块
一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头 ...
随机推荐
- window安装ubuntu系统
- PHP基础1--环境搭建
主要: 环境搭建 站点配置 环境搭建 web运行流程: 1. 浏览器输入地址,回车(发送请求) 2. 根据规则找到对应web服务器.规则如下: 首先在本机hosts文件中找对应IP hosts位置: ...
- Win7装在其他盘 (非C盘)办法
Win7装在其他盘 (非C盘)办法 1]将GHO还原到其他盘(非C盘),如H盘 2]用进U盘系统,里的工具,恢复启动H盘 3]将H盘的Boot文件夹,及其他根目录的所有文件复制到C盘根目录,重启即可开 ...
- hadoop生态搭建(3节点)-10.spark配置
# https://www.scala-lang.org/download/2.12.4.html# ================================================= ...
- Java开发小技巧(五):HttpClient工具类
前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...
- 流程控制之--if。
假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断那条岔路是你真正要走的路,如果我们想让程序也能处理这样 ...
- 20145207 ms08_067攻击实验
ms08_067攻击实验原理 实验过程 查看两台主机ip,并ping通 启动msf,查看关于ms08_067漏洞的基本信息 查看其可攻击的操作系统 查看可用载荷 查看需要设定的参数 修改LHOST(攻 ...
- 全新Ubuntu-13.04安装配置redmine
1. apt-get install vim apache2 libapache2-mod-passenger ruby rubygems libruby ruby-dev libmagickc ...
- android学习十二 配置变化
1.配置变化会终止当前活动,并重建活动 2.配置变化有 2.1 屏幕方向变化 2.2 语言变化 2.3 插到基座等 3. 配置变化应用程序不会清除,上下文对新活动依然有效 ...
- 微信小程序学习笔记(1)-微信小程序样式设置逻辑
1.微信小程序的样式设置统一在每一页的.wxss的样式文件中,所有的样式设置代码统一写入这个文件中: 2.样式主要是通过.wxml里面控件的“class”属性来调用,此处调用会有几个细节要注意: 1) ...