栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

b java.net包源码详解

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

b java.net包源码详解

—> go to 总目录

文章目录
  • 一、Addresses
    • 1.1 InetAddressImpl
    • 1.2 InetAddress类
    • 1.3 SocketAddress
  • 二、SOCKET 套接字
    • 2.1 tcp socket
      • Scoket 类
      • ServerSocket 类
    • 2.2 udp socket
      • DatagramPacket
      • DatagramSocket
      • MulticastSocket
    • 2.3 SocketOptions
      • SocketImpl--TCP类
        • AbstractPlainSocket
        • PlainSocketImpl
        • HttpConnectSocketImpl
      • SocketImpl--UDP类
        • DatagramSocketImpl
      • SocketImpl--socks类
      • 套接字状态StandardScoketOptions
    • 2.4 NetworkInterface
  • 三、URLConnection
    • 3.1 URI
    • 3.2 URL
    • 3.3 Connection
    • 3.4 httphandle

脑图有描绘java.net的结构。
java.net是java最早的网络编程工具包。主要是C/S结构的BIO模型,效率比较低。
常用的包有nio,以及netty包。

一、Addresses
  • 处理IP协议ipv4/ipv6
  • 处理socket地址(ip+port)

名词解释

名称翻译描述
unicast单播指数据包发送一个目的地址,TCP和UDP都可以
multicast和多播多播数据包同时发送到多个目的地址,只有UDP可以
1.1 InetAddressImpl

inetAddressImpl一系列的类需要调用本地方法。这里类是私有的,用户不可见。会被注入到InetAddress类中。

  • anyLocalAddress是0.0.0.0
1.2 InetAddress类

  • originalHostName 原始的hostname的保留,对一些domain格式命名的host特别有用,比如 a.dome.s
  • hostname 主机标识
  • int address 地址
  • family 地址簇,ipv4 标识是1,ipv6标识是2

功能

  • 存储ip的元数据信息比如上面的hoder
  • 调用本地方法,获取hostname,ipv4,ipv6地址,回环地址
  • ip的地址是有不同性质的,比如是否是回环地址,网站地址,该地址是否有效。提供一系列is方法来判断。
  • 私有方法提供缓存机制
  • 工具方法提供域名解析,比如输入域名地址和域名返回Ip等
1.3 SocketAddress

ip+port的载体,被用于socket的binding和connecting或者返回值。

二、SOCKET 套接字

tcp是一个c/s结构,sockets分为Socket和ServerSocket。

2.1 tcp socket Scoket 类

c/s的client端。

Field:SocketIml 真正操作socket动作的类,调用本地方法
method

  • bind() 方法,绑定adress类(ip+port)
  • connect() 实质是调用impl的connect方法,真正的发起联接
  • getInputStream()/getOutputStream()方法,获取输入输出流
  • getChannel(),channel是一种新的模型比InputStream更好用。
  • 设置一些套接字状态的方法,核心就是下面的SocketOptions
ServerSocket 类

对adress(ip+port)进行监听,监听实际上是通过监听backlog,accept()方法是一个阻塞性方法,调用时就去查询backlog,有记录就链接

每来一个链接,就会产生一个socket相关的fd。这个backlog其实就是一个数组,记录链接的数量。

  • accept方法对应socket的connect,是服务端进行连接的,发起时是一个阻塞式的等待,就是传统的BIO模型。
2.2 udp socket DatagramPacket

UDP包的数据格式

DatagramSocket

和TCP不同,UDP并不建立连接。通过bind函数来监听某一个端口,并从这个个端口接受数据(也可以在使用receive是指定其他端口)。

  • bind 指定收发数据的端口
  • conect函数。UDP并不建立连接,但是这里的connect,会丢弃到不是目标address的数据包。
MulticastSocket

多个部署组

2.3 SocketOptions

套接字状态,说明一个套接字的名称和类型。

底下有一堆实现类,这些实现类会被注入到Socket中。

SocketImpl–TCP类

  • 一个socketImpl支持socket类和ServerSocket,同时有fd文件,adress目标端口。和本地用来通信的端口
AbstractPlainSocket

抽象类,ScoketImpl的子类,有更具体的业务逻辑实现。而SocketImpl仅仅是定义了方法没有实现。

PlainSocketImpl

协议无关的AbstractPlainSocket子类。调用了大量的native方法。

HttpConnectSocketImpl

基于HTTP协议的socketimpl,就是基于http协议,比如websocket

SocketImpl–UDP类 DatagramSocketImpl

为multicast准备的,就是UDP。

  • connect并不是链接,而是排斥未知来源的包
  • setTTL 包的失效时间
  • 这也是一个可以包含多个adress的组,同时把包发给多个IP
SocketImpl–socks类

一种网络穿透协议,需要server和client,具体可以在后面专门开篇幅去讲,也会讲到代理的编程

套接字状态StandardScoketOptions

一个工具类定义了socket的几种状态。
标准的套接字状态,ScoketOptions是较早的状态标识,后面统一用StandardScoketOptions。

名称含义
IP_MULTICAST_IFInternet协议(IP)多播数据报的网络接口。
IP_MULTICAST_LOOPInternet协议(IP)多播数据报的回环IP
IP_MULTICAST_TTLInternet协议(IP)多播数据报 的生存时间
IP_TOSInternet协议(IP)标头中的服务类型(ToS)八位字节。
SO_BROADCAST允许传输广播数据报。
SO_KEEPALIVE保持连接活着。
SO_LINGER如果数据存在,则关闭。
SO_RCVBUF套接字接收缓冲区的大小。
SO_REUSEADDR重复使用地址。
SO_REUSEPORT重用端口。
SO_SNDBUF套接字发送缓冲区的大小。
TCP_NODELAY禁用Nagle算法。
2.4 NetworkInterface

这个接口也是同样使用本地方法,是本地的网络信息的模型,也是提供了工具去访问。
NetworkInterface

三、URLConnection

URI包括URL和URN两个类别,URL是URI的子集,所以URL一定是URI,而URI不一定是URL
URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。
URL = Universal Resource Locator 统一资源定位符,一种定位资源的主要访问机制的字符串,一个标准的URL必须包括:protocol、host、port、path、parameter、anchor。
URN = Universal Resource Name 统一资源名称,通过特定命名空间中的唯一名称或ID来标识资源。
理解
个人的身份证号就是URN,个人的家庭地址就是URL,URN可以唯一标识一个人,而URL可以告诉邮递员怎么把货送到你手里。

3.1 URI

URI是网络资源的描述格式。形如URI = scheme ":" hire-part ["?" query] [ "#" fragment ]
这个类就是这个协议字段的载体,用来生成和处理这些字段

3.2 URL

URI除了URI还附带协议属性,就是包含描述如何传递的方式。
类定义
filed

  • protocl 协议的标识字段
  • address ip+port的地址
  • connection 这个就是与协议对应的链接描述。
    method
  • uri的处理
  • connection的处理
3.3 Connection

与协议相关的实现类。

对不同协议的解析和处理。
类的成员包含URL的定义,和conection建立连接的定义。
具体的解析行为在实现类上

3.4 httphandle

工具类,被定义用来解析request或者response,不同状态和不同容容块的工具。
这样的好处是,把解析逻辑和目标内容,封装在一起,方便把整个过程拆分成小截。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954781.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号