-
Java Net-09-Frame
Frame
程序间达成的某种包含了信息交换的形式和意义的共识称为协议,用来实现特定应用程序的协议叫做应用程序协议。
大部分应用程序协议是根据由字段序列组成的离散信息定义的,其中每个字段中都包含了一段以位序列编码(即二进制字节编码,也可以使用基于文本编码的方式,但常用协议如:TCP、UDP、HTTP 等在传输数据时,都是以位序列编码的)的特定信息。
应用程序协议中明确定义了信息的发送者应...
2018-09-23 01:35:05 |
Java
-
Java Net-08-URL
URLConnection
创建连接
在java.net包中包含两个有趣的类:URL类和URLConnection类。
这两个类可以用来创建客户端到web服务器(HTTP服务器)的连接。
@Test
public void getTest() throws IOException {
URL url = new URL("https://www.baidu.com/");
...
2018-09-23 01:35:05 |
Java
-
Java Net-07-UDP Socket
UDP
协议
UDP 协议提供的服务不同于 TCP 协议的端到端服务,它是面向非连接的,属不可靠协议,UDP 套接字在使用前不需要进行连接。
际上,UDP 协议只实现了两个功能:
在 IP 协议的基础上添加了端口;
对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据。
java 支持
Java 通过 DatagramPack...
2018-09-23 01:35:05 |
Java
-
Java Net-05-死锁
基础原理
首先需要明白数据传输的底层实现机制,在上一章中有详细的介绍,我们提到了 SendQ 和 RecvQ 缓冲队列,这两个缓冲区的容量在具体实现时会受一定的限制,虽然它们使用的实际内存大小会动态地增长和收缩,但还是需要一个硬性的限制,以防止行为异常的程序所控制的单一 TCP 连接将系统的内存全部消耗。
正是由于缓冲区的容量有限,它们可能会被填满,事实也正是如此,如果与 TCP 的流量...
2018-09-23 01:35:05 |
Java
-
Java Net-05-TCP Socket 底层原理与生命周期
数据传输的底层实现
数据结构
如果不理解套接字的具体实现所关联的数据结构和底层协议的工作细节,就很难抓住网络编程的精妙之处,对于 TCP 套接字来说,更是如此。
套接字所关联的底层的数据结构集包含了特定 Socket 实例所关联的信息。
比附,套接字结构除其他信息外还包含:
该套接字所关联的本地和远程互联网地址和端口号。
一个 FIFO(Firs...
2018-09-23 01:35:05 |
Java
-
Java Net-04-TCP Socket NIO 方式实现
TCP Socket NIO
基础知识
NIO 采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的 I/O,即在等待连接、读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候,程序也可以做其他事情,以实现线程的异步操作。
考虑一个即时消息服务器,可能有上千个客户端同时连接到服务器,但是在任何时刻只有非常少量的消息需要读取和分发(如果采用线程...
2018-09-23 01:35:05 |
Java
-
Java Net-03-TCP Socket
TCP Socket
TCP 协议
协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析。
TCP/IP 协议族有 IP 协议、TCP 协议和 UDP 协议。现在 TCP/IP 协议族中的主要 socket 类型为流套接字(使用 TCP 协议)和数据报套接字(使用 UDP 协议)。
TCP 协议提供面向连接的服务,通...
2018-09-23 01:35:05 |
Java
-
Java Net-02-InetAddress
基础知识
IP 地址
IP地址是由IP使用的32位或128位无符号数字,IP是一种较低级别的协议,UDP和TCP等协议都是在此基础上构建的。
IP地址体系结构由RFC 790:分配号、RFC 1918:私有internet的地址分配、RFC 2365:管理作用域的IP组播和RFC 2373: IP版本6寻址体系结构定义。
InetAddress的实例由IP地址和相应的主机名组成(取决...
2018-09-23 00:51:50 |
Java