没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第 1 章 简介 ....................................................................................................................................3
1.1 计算机网络,分组报文和协议........................................................................................3
1.2 关于地址............................................................................................................................6
1.3 关于名字............................................................................................................................8
1.4 客户端和服务器................................................................................................................8
1.5 什么是套接字....................................................................................................................9
1.6 练习..................................................................................................................................10
第 2 章 基本套接字 ......................................................................................................................10
2.1 套接字地址......................................................................................................................10
2.2 TCP套接字.......................................................................................................................17
2.2.1 TCP客户端............................................................................................................17
2.2.2 TCP服务器端........................................................................................................22
2.2.3 输入输出流...........................................................................................................26
2.3 UDP套接字 ......................................................................................................................28
2.3.1 DatagramPacket类...............................................................................................28
2.3.2 UDP客户端 ...........................................................................................................30
2.3.3 UDP服务器端 .......................................................................................................36
2.3.4 使用UDP套接字发送和接收信息 ......................................................................38
2.4 练习..................................................................................................................................40
第 3 章 发送和接收数据...............................................................................................................41
3.1 信息编码..........................................................................................................................42
3.1.1 基本整型...............................................................................................................42
3.1.2 字符串和文本.......................................................................................................48
3.1.3 位操作:布尔值编码...........................................................................................50
3.2 组合输入输出流..............................................................................................................51
3.3 成帧与解析......................................................................................................................52
3.4 Java特定编码...................................................................................................................58
3.5 构建和解析协议消息......................................................................................................59
3.5.1 基于文本的表示方法...........................................................................................62
3.5.2 二进制表示方法...................................................................................................65
3.5.3 发送和接收...........................................................................................................67
3.6 结束..................................................................................................................................76
3.7 练习..................................................................................................................................76
第 4 章 进阶 ..................................................................................................................................77
4.1 多任务处理......................................................................................................................77
4.1.1 Java 多线程..........................................................................................................78
4.1.2 服务器协议...........................................................................................................80
4.1.3 一客户一线程.......................................................................................................84
4.1.4 线程池...................................................................................................................86
4.1.5 系统管理调度:Executor接口 ...........................................................................89
4.2 阻塞和超时......................................................................................................................91
4.2.1 accept(),read()和receive()....................................................................................91
4.2.2 连接和写数据.......................................................................................................92
4.2.3 限制每个客户端的时间.......................................................................................92
4.3 多接收者..........................................................................................................................94
4.3.1 广播.......................................................................................................................94
4.3.2 多播.......................................................................................................................95
4.4 控制默认行为................................................................................................................100
4.4.1 Keep-Alive...........................................................................................................100
4.4.2 发送和接收缓存区的大小.................................................................................101
4.4.3 超时.....................................................................................................................101
4.4.4 地址重用.............................................................................................................102
4.4.5 消除缓冲延迟.....................................................................................................102
4.4.6 紧急数据.............................................................................................................103
4.4.7 关闭后停留.........................................................................................................103
4.4.8 广播许可.............................................................................................................103
4.4.9 通信等级.............................................................................................................104
4.4.10 基于性能的协议选择.......................................................................................104
4.5 关闭连接........................................................................................................................104
4.6 Applets ........................................................................................................................... 111
4.7 结束................................................................................................................................112
4.8 练习................................................................................................................................112
第 5 章 NIO.................................................................................................................................112
5.1 为什么需要NIO? ........................................................................................................ 113
5.2 与Buffer一起使用Channel..........................................................................................115
5.3 Selector...........................................................................................................................118
5.4 Buffer详解 .....................................................................................................................125
5.4.1 Buffer索引...........................................................................................................125
5.4.2 创建Buffer..........................................................................................................126
5.4.3 存储和接收数据.................................................................................................128
5.4.4 准备Buffer:clear(),flip(),和rewind()........................................................130
5.4.5 压缩Buffer中的数据..........................................................................................132
5.4.6 Buffer透视:duplicate(),slice()等 ..................................................................134
5.4.7 字符编码.............................................................................................................136
5.5 流(TCP)信道详解....................................................................................................136
5.6 Selector详解...................................................................................................................139
5.6.1 在信道中注册.....................................................................................................139
5.6.2 选取和识别准备就绪的信道.............................................................................141
5.6.3 信道附件.............................................................................................................143
5.6.4 Selector小结........................................................................................................144
5.7 数据报(UDP)信道 ...................................................................................................144
5.8 练习................................................................................................................................149
1. 使用定长的写缓冲区改写TCPEchoClientNonblocking.java。 ....................................149
2.使用Buffer和DatagramChannel编写一个回显客户端。 ................................................149
第 6 章 深入剖析 ........................................................................................................................149
6.1 缓冲和TCP....................................................................................................................152
6.2 死锁风险........................................................................................................................155
6.3 性能相关........................................................................................................................158
6.4 TCP套接字的生存周期.................................................................................................158
6.4.1 连接.....................................................................................................................158
6.4.2 关闭TCP连接.....................................................................................................164
6.5 解调多路复用揭秘........................................................................................................167
6.6 练习................................................................................................................................169
第 1 章 简介
如今,人们可以通过电脑来打电话,看电视,给朋友发送即时信息,与其他人玩游戏,
甚至可以通过电脑买到你能想到的任何东西,包括从歌曲到 SUV[ ]。计算机程序能够通过
互联网相互通信使这一切成为了可能。很难统计现在有多少个人电脑接入互联网,但可以肯
定,这个数量增长得非常迅速,相信不久就能达到 10 亿。除此之外,新的应用程序每天在
互联网上层出不穷。随着日益增加的互联网访问带宽,我们可以预见,互联网将会对人们将
来的生活产生长远的影响。
那么程序是如何通过网络进行相互通信的呢?本书的目的就是通过在 Java 编程语言环
境下,带领你进入对这个问题的解答之路。Java 语言从一开始就是为了让人们使用互联网而
设计的,它为实现程序的相互通信提供了许多有用的抽象应用程序接口(API, Application
Programming Interface),这类应用程序接口被称为套接字(sockets)。
在我们开始探究套接字的细节之前,有必要向读者简单介绍计算机网络和通信协议的整
体框架,以使读者能清楚我们的代码将应用的地方。本章的目的不是向读者介绍计算机网络
和 TCP/IP 协议是如何工作的(已经有很多相关内容的教程[ ][ ][ ][ ][ ]),而是介绍一些基
本的概念和术语。
1.1 计算机网络,分组报文和协议
计算机网络由一组通过通信信道相互连接的机器组成。我们把这些机器称为主机
(hosts)和路由器(routers)。主机是指运行应用程序的计算机,这些应用程序包括网络浏
览器(Web browser),即时通讯代理(IM agent),或者是文件共享程序。运行在主机上的
应用程序才是计算机网络的真正"用户"。路由器的作用是将信息从一个通信信道传递或转发
(forward)到另一个通信信道。路由器上可能会运行一些程序,但大多数情况下它们是不
运行应用程序的。基于本书的目的对通信信道(communication channel)进行解释:它是将
字节序列从一个主机传输到另一个主机的一种手段,可能是有线电缆,如以太网(Ethernet),
也可能是无线的,如 WiFi[ ],或是其他方式的连接。
路由器非常重要,因为要想直接将所有不同主机连接起来是不可行的。相反,一些主机
先得连接到路由器,路由器再连接到其他路由器,这样就形成了网络。这种布局使每个主机
只需要用到数量相对较少的通信信道,大部分主机仅需要一条信道。在网络上相互传递信息
的程序并不直接与路由器进行交互,它们基本上感觉不到路由器的存在。
这里的信息(information)是指由程序创建和解释的字节序列。在计算机网络环境中,
这些字节序列被称为分组报文(packets)。一组报文包括了网络用来完成工作的控制信息,
有时还包括一些用户数据。用于定位分组报文目的地址的信息就是一个例子。路由器正是利
用了这些控制信息来实现对每个报文的转发。
协议(protocol)相当于是相互通信的程序间达成的一种约定,它规定了分组报文的交
换方式和它们包含的意义。一组协议规定了分组报文的结构(例如报文中的哪一部分表明了
其目的地址)以及怎样对报文中所包含的信息进行解析。设计一组协议,通常是为了在一定
约束条件下解决某一特定的问题。比如,超文本传输协议(HTTP,HyperText Transfer
Protocol)是为了解决在服务器间传递超文本对象的问题,这些超文本对象在服务器中创建
和存储,并由 Web 浏览器进行可视化,以使其对用户有用。即时消息协议是为了使两个或
更多用户间能够交换简短的文本信息。
要实现一个有用的网络,必须解决大量各种各样的问题。为了使这些问题可管理和模块
化,人们设计了不同的协议来解决不同类型的问题。TCP/IP 协议就是这样一组的解决方案,
有时也被称为协议族(protocol suite)。它刚好是互联网所使用的协议,不过也能用在独立
的专用网络中。本书以后所提到的网络(network),都是指任何使用了 TCP/IP 协议族的网
络。TCP/IP 协议族主要协议有 IP 协议(互联网协议,Internet Protocol[ ]),TCP 协议(传
输控制协议,Transmission Control Protocol[ ])和 UDP 协议(用户数据报协议,User Datagram
Protocol[ ])。
事实证明将各种协议分层组织是一种非常有用的措施,TCP/IP 协议族,实际上其他所
有协议族都是按这种方式组织的。图 1.1 展示了通信协议、应用程序和主机和路由器中的套
接字 API(应用程序接口,Application Programming Interface)之间的关系,同时也展示了
数据流从一个应用程序到另一个应用程序的过程(使用 TCP 协议)。标记为 TCP,UDP 和
IP 的方框分别代表了这些协议的实现,它们通常驻留在主机的操作系统中。应用程序通过
套接字 API 对 UDP 协议和 TCP 协议所提供的服务进行访问。箭头描述了数据流从一个应用
程序,经过 TCP 协议层和 IP 协议层,通过网络,再反向经过 IP 协议层和 TCP 协议层传输
到另一端的应用程序。
(点击查看大图)图 1.1: 一个 TCP/IP 网络
Application:应用程序;Socket:套接字;Host:主机;Channel:通信信道;Ethernet:
以太网;Router:路由器;Network Layer:网络层;Transport Layer:传输层。
在 TCP/IP 协议族中,底层由基础的通信信道构成,如以太网或调制解调器拨号连接。
这些信道由网络层(network layer)使用,而网络层则完成将分组报文传输到它们的目的地
址的工作(也就是路由器的功能)。TCP/IP 协议族中属于网络层的唯一协议是 IP 协议,它
使两个主机间的一系列通信信道和路由器看起来像是一条单一的主机到主机的信道。
IP 协议提供了一种数据报服务:每组分组报文都由网络独立处理和分发,就像信件或
包裹通过邮政系统发送一样。为了实现这个功能,每个 IP 报文必须包含一个保存其目的地
址(address)的字段,就像你所投递的每份包裹都写明了收件人地址。(我们随即会对地址
进行更详细的说明。)尽管绝大部分递送公司会保证将包裹送达,但 IP 协议只是一个"尽力
而为"(best-effort)的协议:它试图分发每一个分组报文,但在网络传输过程中,偶尔也会
发生丢失报文,使报文顺序被打乱,或重复发送报文的情况。
IP 协议层之上称为传输层(transport layer)。它提供了两种可选择的协议:TCP 协议和
UDP 协议。这两种协议都建立在 IP 层所提供的服务基础上,但根据应用程序协议(application
protocols)的不同需求,它们使用了不同的方法来实现不同方式的传输。TCP 协议和 UDP
协议有一个共同的功能,即寻址。回顾一下,IP 协议只是将分组报文分发到了不同的主机,
很明显,还需要更细粒度的寻址将报文发送到主机中指定的应用程序,因为同一主机上可能
有多个应用程序在使用网络。TCP 协议和 UDP 协议使用的地址叫做端口号(port numbers),
都是用来区分同一主机中的不同应用程序。TCP 协议和 UDP 协议也称为端到端传输协议
(end-to-end transport protocols),因为它们将数据从一个应用程序传输到另一个应用程序,
而 IP 协议只是将数据从一个主机传输到另一主机。
剩余168页未读,继续阅读
资源评论
- sccotjobs2014-01-11很不错的资料 谢谢楼主
cwh0008
- 粉丝: 0
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功