`

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



,

分享到:
评论

相关推荐

    编程的奥秘---.NET课件

    《编程的奥秘——.NET》是一门深入探讨.NET框架及其相关技术的课程,主要以VB.NET编程语言为教学重点。这门课件通过图表解析的方式,帮助学习者理解复杂的编程概念,使得初学者和有经验的开发者都能从中受益。 .NET...

    asp.net socket套接字资料和实例大全

    ASP.NET Socket套接字技术是网络编程中的一个重要组成部分,它提供了低级别的网络通信能力,允许开发者直接通过TCP或UDP协议进行数据传输。本资料旨在帮助读者深入理解和实践Socket编程,从而构建高性能、高效率的...

    实战C#.NET编程----Spring.NET & NHibernate从入门到精通 V0.50

    《实战C#.NET编程——Spring.NET & NHibernate从入门到精通》是一本专注于C# .NET平台下使用Spring.NET和NHibernate两个框架进行开发的实战指南。这本书旨在帮助读者掌握这两种强大的工具,从而提升在.NET环境下的...

    C#网络编程 Apress - Practical .NET 2.0 Networking Projects (Jan 2007).pdf

    《Practical .NET 2.0 Networking Projects》不仅是一本深入浅出介绍网络编程技术的书籍,更是提供了大量实用的项目案例,帮助读者从理论到实践全方位掌握网络编程的相关知识。无论是初学者还是有一定经验的开发者,...

    java.net.SocketException Connection reset 解决方法

    "java.net.SocketException Connection reset 解决方法" 在 Java 编程中,SocketException 是一种常见的异常,特别是在网络编程中。Conexion reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器...

    Net实战商用源码---ASP.NET安全生产信息报送系统源码

    8. **Web API**:如果系统涉及与其他服务或设备的集成,可能利用ASP.NET Web API来提供RESTful接口。 9. **版本控制**:作为一个实战商用项目,源码很可能使用了Git等版本控制系统,方便团队协作和版本管理。 10. ...

    Android高级应用源码-Android与.net交互(含post提交使用的Soap).zip

    在这个"Android高级应用源码-Android与.NET交互(含post提交使用的Soap).zip"的压缩包中,我们可以找到相关的示例代码,帮助我们理解如何实现这种交互。 首先,我们来看【POST提交】,这是HTTP协议中的一个方法,...

    C#中的套接字编程实例

    在C#中,套接字编程是实现网络通信的基础,特别是在TCP/IP协议栈上构建应用。C#提供了丰富的API来支持套接字编程,使得开发者能够轻松地创建客户端和服务器端应用程序。以下是对C#中套接字编程的详细解释。 首先,...

    asprise-ocr-csharp-vb.net-15.3.1-trail

    - 强大的API:提供C#、VB.NET等多种编程语言的API,便于开发者集成到自己的应用程序中。 3. C#和VB.NET接口: 在DEMO中,我们可以看到Asprise OCR如何与C#和VB.NET环境相结合。C#和VB.NET是.NET框架下的两种主要...

    [中文][ASP.NET入门经典-VB.NET 编程篇][35.86 MB]

    ### ASP.NET 入门经典——VB.NET编程篇 #### 知识点概述: 根据提供的文件信息,本资源主要涉及的是ASP.NET与VB.NET的基础及应用技术。ASP.NET是微软开发的一种用于构建动态网页的应用框架,而VB.NET则是Visual ...

    面向对象大胆向前 Java API 实战-Markdown格式的笔记

    **Java API实战笔记概述** Java API是Java开发的核心部分,包含了大量的类库和接口,用于构建各种类型的应用程序。这份面向对象大胆向前的Java API实战笔记涵盖了从基础API到高级特性的广泛主题,旨在帮助开发者...

    Net实战商用源码---ASP.NET资产管理系统源码.zip

    【标题】: ASP.NET资产管理系统源码分析 在IT领域,尤其是企业级应用开发中,ASP.NET是一个广泛使用的框架,由微软公司开发,用于构建高效、安全且可扩展的Web应用程序。本篇将深入探讨“Net实战商用源码---ASP.NET...

    网络编程-狂神说Java学习笔记

    3. **套接字编程**:Java中的Socket和ServerSocket类用于实现TCP编程。Socket用于创建客户端连接,ServerSocket用于监听和接受来自客户端的连接请求。编程过程中需要处理连接、读写数据和关闭连接等步骤。 4. **...

    UNIX网络编程卷1:套接字联网API(第3版)

    《UNIX网络编程(卷1):套接字联网API(第3版)》是一部UNIX网络编程的经典之作!书中全面深入地介绍了如何使用套接字API进行网络编程。全书不但介绍了基本编程内容,还涵盖了与套接字编程相关的高级主题,对于客户/...

    Web程序设计--ASP.NET实用网站开发课后习题及答案

    ASP.NET 实用网站开发知识点总结 本节总结了 ASP.NET 实用网站开发的相关知识点,包括 .NET Framework、ASP.NET 网站开发、HTML、CSS、JavaScript、C#语言等方面。 一、.NET Framework * .NET Framework 主要包括...

    基于Java语言的流式套接字编程探析.pdf

    本文主要探讨了基于Java语言的流式套接字编程,首先对套接字编程进行了介绍,接着分析了套接字编程所需的类,并提出了单服务器与多客户通信的设计思路,最后通过示例演示了程序,并提出了改进意见。 1. 套接字及TCP...

    JAVA网络编程资料(4)-相关API—Java Transaction API概述(1).chm

    JAVA网络编程资料(4)-相关API—Java Transaction API概述(1).chm

    UNIX网络编程 卷1 套接字联网API W Richard Stevens pdf

    《UNIX网络编程 卷1 :套接字联网API 第3版 》全面深入地介绍了如何使用套接字API进行网络编程 全书不但介绍了基本编程内容 还涵盖了与套接字编程相关的高级主题 对于客户 服务器程序的各种设计方法也作了完整的探讨 ...

    2023-JAVA微信支付-工具类,包含微信退款,微信支付,微信相关V2版本V3接口集成

    内容:微信支付-工具类,包含微信退款,微信支付,微信相关V2版本V3接口集成 适用人群:JAVA 使用场景:集成好微信支付,可自由调整相关类,自由编写业务场景 说明: 将工具类导入该自行项目,将maven-jar 的配置...

Global site tag (gtag.js) - Google Analytics