首页>参考读物>计算机科学与技术>软件与程序设计

Java TCP/IP Socket编程(原书第2版)
作者 : Kenneth L. Calvert ; Michael J. Donahoo
译者 : 周恒民
丛书名 : 华章程序员书库
出版日期 : 2009-02-02
ISBN : 7-111-25756-1
定价 : 29.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 172
开本 : 16开
原书名 : TCP/IP Sockets in Java:Practical Guide for Programmers, Second Edition
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

我觉得本书做了很好的工作,包括简明扼要地抓住关键问题,提供了非常好的实例,因此可以作为重要主题的参考资料。我认为本书适合希望快速地掌握Java网络编程的开发者,也可以作为学生的补充读物。
  ——Robert Brunner,美国国家超级计算应用中心(NCSA)

  在TCP/IP Socket首次发布时,Java作为一个新的未被关注的编程语言刚出现。然而,自2001年以来,Java的网络编程能力已经得到了很大程度的扩展,而且持续的应用优势已经使其成为了一个占主导地位的平台。考虑到Java受欢迎程度和近期在形式上和功能上令人兴奋的创新,本书的新版涵盖了Java的当前最新版本的内容(1.5版至1.7版),以及一些新的重要的抽象,包括NetworkInterface,InterfaceAddress,Inet4/6Address抽象、SocketAddress/InetSocketAddress和Executor等。现在几乎所有互联网应用程序都使用Java Socket进行通信,而本书专注的、教导式的方法,使读者能够快速掌握所有计算机通信的任务和技术要点。

  本书特点

对Socket编程的重点进行了集中简明的介绍,以使读者能够迅速掌握;并且使工程师们能够迅速地将所学的技能应用到他们的日常工作中。
对最新的Java平台(1.7)进行了简明而紧随其发展的介绍,使开发者即使在最新的技术面前也能处理大量未探究的陷阱。
配套网站(books.elsevier.com/companions/9780123742551)为所有的示例程序提供了源码,从而使读者能够在上下文中查看重要的对象和方法,并理解每行代码的作用。

作者简介
Kenneth L. Calvert 肯塔基大学(University of Kentucky)的教授,他的教学和研究方向是计算机网络系统。他已经有近20年的TCP/IP Socket编程经验。
Michael J. Donahoo 贝勒大学(Baylor University)的副教授,为大学生或大学研究生讲授计算机网络课程。他已经编著了在各种编程语言下进行Socket编程的多本书籍和一本有关SQL的书籍。

图书特色

图书前言

多年来,大学里的计算机网络课程使学生很少或几乎没有动手实践的机会。由于各种各样的原因(其中也包含一些积极因素),教师仅仅通过公式、分析以及对协议栈的抽象描述来讲授计算机网络的原理。教科书里可能会包含一些代码,但都没有与学生能够动手实践的任何东西结合起来。但是我们相信,如果能让学生看到(然后实现)这些原理在实际应用中的具体例子,他们将学得更好。所幸的是情况已经发生了变化。互联网已经成为人们日常生活的一部分,大部分学生(以及他们的程序)都能快速方便地访问网络服务,而且能免费获得大量正式软件(不分优劣)。
  我们基于写《TCP/IP Sockets in C》同样的目的编写了本书:我们需要一些编程练习资源来支持计算机网络课程的学习。我们旨在为学生提供充足的引导,使他们能够在真实的网络服务中实践,而不会手足无措。在掌握了基本原理后,学生就能够进一步接触一些高级任务,并从中学习到路由算法、多媒体协议、介质访问控制等相关知识。我们尽量使本书像我们之前其他书一样,让学生选择自己熟悉的编程语言和技术,从而保证他们能学会相同的技能并理解相同的概念。当然,目前尚不清楚这一目标是否可以实现,但是无论如何,本书的范围、定价以及介绍的深度都力求做到这点。
  面向的读者
  本书面向两种类型的读者。第一类是学习计算机网络课程的本科生或研究生,他们是促使我们写这本书的首要因素。第二类是了解Java,想要学习利用Java来编写互联网应用程序的人。我们尽量保持了内容的简洁和专一性,因此本书既可以作为学生的辅助教程,也可以作为从业者涉足这一领域的入门指南。但是,你不能期望自己读完本书后就成为这一领域的专家!本书的目的只是引导读者入门并掌握足够的知识,从而能够进行独立研究和学习。
  为配合练习,读者应有一台安装Java的计算机。本书基于Java 1.6版和Java虚拟机(JVM),然而,除少量较新的方法外,本书的代码也能在更早版本的Java中运行。由于Java具有可移植性,在不同硬件和操作系统上运行程序没有差别。
内容主线
  第1章对计算机网络的概念进行了总体概述。从各方面看,这一介绍并不全面,但能够使读者与贯穿全书的概念和术语相同步。第2章介绍了简单的客户端和服务器的结构,这章中的代码能作为进行各种练习的起点。第3章涵盖了有关消息的创建和解析的基础内容。读者若能理解并消化前3章的内容,将能够为简单应用协议实现一个客户端和服务器。第4章和第5章介绍了建立具有扩展性和健壮性的客户端与服务器端的高级技术,其中,第5章专注于工具的应用,并对“New I/O”包进行了讲解。最后,为了与“通过程序来阐明原理”的目的相一致,第6章从细节上讨论了程序的构造和底层协议的实现之间的关系。
  本书主要通过简单的程序实例来介绍一些编程概念,每一个实例后都附有对每行代码的注解,用以说明程序各部分的功能。这样使读者能够结合程序的上下文来理解重要的对象和方法。当你阅读代码时,就能理解每行代码的作用。
  我们的例子并没有涵盖Java中所有库的应用。有些功能,特别是序列化技术,要求相互通信的所有节点都是由Java实现的。同时,为了尽快地介绍实例,我们刻意避免介绍引入之后将被清除的类和方法。我们尽量保持了内容的简洁,尤其是前面几个章节。
  本书不包含哪些内容
  作为一本辅导教程,为了使其定价保持在合理的范围内,我们必须对本书所涉及的内容有所限制,同时也要严格专注于前面所提出的目标。由于我们省略了某些方面的主题,因此有必要说明本书不包含哪些内容:
  本书不是一本介绍Java编程语言的书。我们只专注于TCP/IP套接字编程,同时希望读者已经熟悉Java语言的基本语法特征和类库(包括后期发布版所包含的内容,如泛型等),并知道如何使用Java进行程序开发。
本书不是一本介绍协议的书。通过阅读本书并不能使你成为IP、TCP、FTP、HTTP或其他已知协议(可能反馈协议除外)的专家。我们的关注点在于套接字抽象层为TCP/IP服务所提供的接口。如果你已经对TCP协议和IP协议工作机制有所了解,这将对后续的学习有所帮助,不过第1章已经对相关内容做了足够的介绍。
本书并不是一本介绍隐藏了通信细节的Java类库集(如HTTPConnection)而使程序员工作变得更轻松的实用指南。本书讲授进行通信协议相关开发的基础,而不是去回避它,因此书中并没有对那些隐藏了通信细节的API进行介绍。我们希望读者能够从通信线路的传输内容上理解协议,所以本书在大部分情况下直接使用了简单的字节流和显式的字符编码,并不对URL、URLConnection等类进行介绍。相信读者一旦理解了底层的基本原理,对那些更方便的类的使用就很容易上手了。
本书不是一本讲解面向对象设计的书。我们致力于介绍TCP/IP套接字编程的重要原理,并通过实例对这些原理进行简要说明。本书尽可能使实例代码符合面向对象设计的思想,但如果这样做会增加代码的复杂度从而使套接字的原理变得模糊,或使代码变得臃肿,我们将把清晰性放在第一位,舍弃面向对象设计的思想。本书也没有包含有关网络编程的设计模式。(尽管我们认为本书也为理解这类设计模式提供了一些必要的背景知识!)
本书不是一本讲解如何编写适用于生产环境的高质量代码的书。再次声明,虽然我们尽量使代码具有一定的健壮性,但这些实例代码的主要目的还是为了教学。为了避免由于使用了大量的错误处理代码而导致原理的含糊,我们放弃了一定的健壮性,使代码更加简洁清晰。
本书不是一本介绍如何用Java实现自定义的本地套接字的书。我们仅专注于Java标准库所提供的TCP/IP套接字,并没有对各种实现了套接字的包装器类进行介绍(如SocketImpl类)。
为了避免本书中的实例聚集了过多的无关代码(即与套接字编程无关的代码),我们所有例子都是基于命令行的。在本书的网站上有一些基于图形界面的网络应用程序的例子,本书没有将其纳入或进行讲解。
本书不是关于Java Applet的书。applet使用了相同的Java网络API,因此一些通信代码看起来非常相似,不过Applet所能进行的通信方式有着非常严格的安全限制。我们对这些限制进行了有限的讨论,并在本书的网站上提供了一个Applet应用程序的例子。然而,对Applet网络编程的完整介绍不属于本书讨论的范围。
致谢
感谢所有为完成本书提供了帮助的人,是他们的努力使本书得以出版。虽然本书很简短,但仍需花大量的时间来审阅原始稿件,审稿人的意见对本书的最终定稿产生了非常重要的影响。
感谢Michel Barbeau、Chris Edmondson-Yurkanan、Ted Herman、Dave Hollinger、Jim Leone、 Dan Schmidt、Erick Wagner、EDS;感谢贝勒大学CSI4321班的学生以及肯塔基大学CS471班的学生。本书中存在的任何疏漏都是我们的责任。
本书不会使你成为一个专家—那需要多年的经验积累。不过我们希望本书能够成为一个有用的资源,即使对那些已经了解了很多Java套接字编程的人也有所帮助。我们享受了写书的过程并从中学到了很多。
反馈
欢迎对本书的各方面提出建议。如果你发现了书中的错误,请联系我们。我们将在本书的网站中维护一个勘误表。你可以通过本书的网站提交反馈:books.elsevier.com/ companions/ 9780123742551
或者向以下地址发送电子邮件:
Kenneth L. Calvert:calvert@uky.edu
Michael J. Donahoo:Jeff_Donahoo@baylor.edu

作者简介

Kenneth L. Calvert ; Michael J. Donahoo:暂无简介

译者简介

周恒民:暂无简介

译者序

如今,TCP/IP已成为计算机网络协议事实上的标准,而Java凭借其跨平台特性和对网络编程的强大支持能力,在网络应用中已占据了主导地位。本书基于TCP/IP套接字的相关原理,对如何在Java中进行套接字编程作了深入浅出的介绍。
  本书内容简明扼要,条理清晰,并在讲解相应的概念或编程技巧时列举了大量的示例程序,能够使读者在动手过程中加深理解,而每章结束时的练习可以帮助读者检查自己对已学知识的掌握程度,因此非常适合作为Java套接字编程的入门教程。虽然本书专注于介绍如何使用Java进行TCP/IP套接字编程,但其涉及的套接字相关概念和基本原理与具体编程语言无关,从而使读者能够抓住套接字编程的本质,并轻松地转向其他编程语言。
  译者在翻译本书时尽量忠实于原文,必要时对原书中提到的概念作了一定的解释,并力求做到言简意赅。限于水平,翻译过程中难免有疏漏之处,敬请广大读者批评指正。
  周恒民
  于北京中关村东路
  2008年10月

图书目录

译者序
前言
第1章 简介 1
1.1 计算机网络、分组报文和协议 2
1.2 关于地址 5
1.3 关于名字 7
1.4 客户端和服务器 8
1.5 什么是套接字 8
1.6 练习 9
第2章 基本套接字 11
2.1 套接字地址 11
2.2 TCP套接字 18
2.2.1 TCP客户端 18
2.2.2 TCP服务器端 23
2.2.3 输入输出流 27
2.3 UDP套接字 28
2.3.1 DatagramPacket类 29
2.3.2 UDP客户端 32
2.3.3 UDP服务器端 37
2.3.4 使用UDP套接字发送和接收信息 39
2.4 练习 41
第3章 发送和接收数据 43
3.1 信息编码 44
3.1.1 基本整型 44
3.1.2 字符串和文本 50
3.1.3 位操作:布尔值编码 52
3.2 组合输入输出流 53
3.3 成帧与解析 54
3.4 Java特定编码 59
3.5 构建和解析协议消息 60
3.5.1 基于文本的表示方法 63
3.5.2 二进制表示方法 65
3.5.3 发送和接收 67
3.6 结束 74
3.7 练习 75
第4章 进阶 77
4.1 多任务处理 77
4.1.1 Java多线程 78
4.1.2 服务器协议 80
4.1.3 一客户一线程 85
4.1.4 线程池 86
4.1.5 系统管理调度:Executor接口 88
4.2 阻塞和超时 91
4.2.1 accept()、read()和receive() 91
4.2.2 连接和写数据 91
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 发送和接收缓存区的大小 100
4.4.3 超时 101
4.4.4 地址重用 102
4.4.5 消除缓冲延迟 102
4.4.6 紧急数据 102
4.4.7 关闭后停留 103
4.4.8 广播许可 103
4.4.9 通信等级 104
4.4.10 基于性能的协议选择 104
4.5 关闭连接 105
4.6 Applet 111
4.7 结束 111
4.8 练习 112
第5章 NIO 113
5.1 为什么需要NIO 113
5.2 与Buffer一起使用Channel 116
5.3 Selector 119
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() 131
5.4.5 压缩Buffer中的数据 133
5.4.6 Buffer透视:duplicate()和
slice()等 134
5.4.7 字符编码 136
5.5 流(TCP)信道详解 137
5.6 Selector详解 140
5.6.1 在信道中注册 141
5.6.2 选取和识别准备就绪的信道 143
5.6.3 信道附件 145
5.6.4 Selector小结 146
5.7 数据报(UDP)信道 146
5.8 练习 151
第6章 深入剖析 153
6.1 缓冲和TCP 155
6.2 死锁风险 158
6.3 性能相关 161
6.4 TCP套接字的生存周期 162
6.4.1 连接 162
6.4.2 关闭TCP连接 167
6.5 解调多路复用揭秘 170
6.6 练习 172

教学资源推荐
作者: 刘博 董学文 等编著
作者: (美)David Vandevoorde
作者: 钱丽萍 汪立东 张健 编著
参考读物推荐
作者: 葛一鸣 著
作者: (美)Chris Radcliff