Java网络编程精解作者:孙卫琴作者:孙卫琴参考书籍:参考书籍:JavaJavaJavaJavaJavaJavaJavaJava网络编程精解网络编程精解技术支持网址:技术支持网址:您可以到以下网址下载本讲义的最新版本:=showessay.jsp&id=927作者简介�孙卫琴,Java系列畅销著作的作者。2002年开始Java技术领域的创作,其作品深受读者欢迎,代表著作有:�Tomcat与JavaWeb开发技术详解第2版2009�Java网络编程精解2007�Java面向对象编程2006�精通Hibernate:Java对象持久化技术详解2005�精通Struts:基于MVC的JavaWeb设计与开发2004�Tomcat与JavaWeb开发技术详解2004�Java2认证考试指南与试题解析2002关于本讲义�Java网络编程精解自出版以来,已经在许多Java培训机构和高校作为教材。为了满足许多老师的热切需求,我为本书制作了完整的教学讲义,共有700多页。我相信这些讲义可以方便老师们的教学工作。�本讲义可供老师们作教学参考。老师们可以根据实际情况,对讲义内容进行调整修改,从而适合自己的教学需要。�此外,这些讲义也可以供Java爱好者自学之用。讲义对Java网络编程精解一书进行了提纲掣领地归纳,可以帮助读者把握Java网络编程的知识结构,进行系统学习。�如果您发现了本讲义中的错误和不足,欢迎来信指正。方便的话,请把修改后的PPT文档发给我,修改之处用绿色字体标识。我的Email:linda_j2ee@yahoo.com.cn�您可以到以下网址下载本讲义的最新版本:=showessay.jsp&id=927您是否适合学习本课程�学习本课,要求学员已经具备了Java编程的基础知识。对于还不熟悉Java语言的读者,建议先阅读作者的另一本书《Java面向对象编程》及相关讲义,本书是它的姊妹篇。引言�Java语言是第一个完全融入网络的语言,它之所以适合编写网络应用程序,归功于它的以下优势。�(1)Java语言与生俱来就是与平台无关的。Java程序能够运行在不同的平台上,运行在不同平台上的Java程序能够方便地进行网络通信。�(2)Java语言具有完善的安全机制,可以对程序进行权限检查,这对网络程序至关重要。�(3)JDK类库提供了丰富的网络类库,如套接字API、JavaMailAPI和JDBCAPI等,大大简化了网络程序的开发过程。课程内容�本课程介绍如何利用Java网络类库来快速便捷地创建网络应用程序,致力于完成以下任务:�实现访问HTTP服务器的客户程序�实现HTTP服务器�实现多线程的服务器,以及非阻塞的服务器�解析并展示HTML页面�通过JDBCAPI访问数据库�通过JavaMailAPI接收和发送电子邮件�利用RMI框架实现分布式的软件系统�进行安全的网络通信,对数据加密,验证身份,保证数据的完整性利用CORBA和Web服务实现分布式的软件系统第1章Java网络编程入门参考《Java网络编程精解》的第1章�1.1进程之间的通信�1.2计算机网络的概念�1.3OSI参考模型�1.4TCP/IP参考模型和TCP/IP协议�1.5用Java编写客户/服务器程序1.1进程之间的通信�进程是指运行中的程序,进程的任务就是执行程序中的代码。�客户程序EchoClient和服务器程序EchoServer。EchoClient程序有两个作用:�与用户交互,从本地控制台获得标准输入流和标准输出流。�与远程的EchoServer通信,向EchoServer发送用户输入的字符串,接收EchoServer返回的响应结果,再把响应结果写到标准输出流。�EchoServer程序负责接收EchoClient发送的字符串,然后把响应结果发送给EchoClient。1.1进程之间的通信上图演示了EchoClient与EchoServer的通信过程。客户机和远程服务器是通过网络连接的两台主机。客户机上运行EchoClient进程,远程服务器上运行EchoServer进程。1.1进程之间的通信�两个进程顺利通信的前提条件是它们所在的主机都连接到了计算机网络上。EchoClient与EchoServer只需关注它们通信的具体内容,例如EchoClient发送信息“hello”,那么EchoServer返回信息“echo:hello”。�EchoClient和EchoServer都无需考虑如何把信息传输给对方。�传输信息的任务是由计算机网络来完成的。1.2计算机网络的概念�所谓计算机网络,是指把分布在不同地理区域的计算机用通信线路互联起来的一个具有强大功能的网络系统。�通俗的说,计算机网络就是通过电缆、电话线、或无线通讯设施等互联的计算机的集合。�网络中每台机器称为节点(node)。大多数节点是计算机,此外,打印机、路由器、网桥、网关和哑终端等也是节点。1.2计算机网络的概念1.2计算机网络的概念不同网络之间的互联靠网络上的标准语言—TCP/IP协议。如上图所示,一个网络使用协议A,另一个网络使用协议B,这两个网络通过TCP/IP协议进行互联。1.3OSI参考模型�OSI参考模型把网络分为7层,参见下图,每一层使用下层提供的服务,并为上层提供服务。1.3OSI参考模型数据在上下层之间的封装和解封装过程1.4TCP/IP参考模型和TCP/IP协议�ISO制定的OSI参考模型提出了网络分层的思想,这种思想对网络的发展具有重要的指导意义。�TCP/IP参考模型吸取了网络分层的思想,但是对网络的层次做了简化,并且在网络各层(除了主机-网络层外)都提供了完善的协议,这些协议构成了TCP/IP协议集,简称TCP/IP协议。1.4TCP/IP参考模型和TCP/IP协议比较TCP/IP参考模型和OSI参考模型1.4TCP/IP参考模型和TCP/IP协议1.4TCP/IP参考模型和TCP/IP协议�(1)主机-网络层�实际上TCP/IP参考模型没有真正提供这一层的实现,也没有提供协议。它只是要求第三方实现的主机-网络层能够为上层—网络互联层提供一个访问接口,使得网络互联层能利用主机-网络层来传递IP数据包。1.4TCP/IP参考模型和TCP/IP协议�(2)网络互联层�网络互联层是整个参考模型的核心。它的功能是把IP数据包发送到目标主机。为了尽快地发送数据,IP协议把原始数据分为多个数据包,然后沿不同的路径同时传递数据包。1.4TCP/IP参考模型和TCP/IP协议�网络互联层具备连接异构网的功能。下图显示了连接以太网和令牌环网的方式。网络互联层采用IP协议,它规定了数据包的格式,并且规定了为数据包寻找路由的流程。1.4TCP/IP参考模型和TCP/IP协议�(3)传输层 传输层的功能是使源主机和目标主机上的进程可以进行会话。在传输层定义了两种服务质量不同的协议,即TCP(TransmissionControlProtocol,传输控制协议)和UDP(User DatagramProtocol,用户数据报协议)。1.4TCP/IP参考模型和TCP/IP协议�TCP协议是一种面向连接的、可靠的协议。它将源主机发出的字节流无差错的发送给互联网上的目标主机。�在发送端,TCP协议负责把上层传送下来的数据分成报文段并传递给下层。�在接收端,TCP协议负责把收到的报文进行重组后递交给上层。�TCP协议还要处理端到端的流量控制,以避免接收速度缓慢的接收方没有足够的缓冲区来接收发送方发送的大量数据。�应用层的许多协议,如HTTP、FTP和TELNET协议等都建立在TCP协议基础上。1.4TCP/IP参考模型和TCP/IP协议�UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。�UDP不能保证数据报的接收顺序同发送顺序相同,甚至不能保证它们是否全部到达目标主机。应用层的一些协议,如SNMP和DNS协议就建立在UDP协议基础上。�如果要求可靠的传输数据,则应该避免使用UDP协议,而要使用TCP协议。1.4TCP/IP参考模型和TCP/IP协议�(4)应用层�TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。针对各种各样的网络应用,应用层引入了许多协议。�基于UDP协议的的应用层协议主要包括:SNMP(网络管理协议)、DNS�基于TCP协议的应用层协议主要包括:FTP、TELNET(虚拟终端协议)、HTTP、HTTPS(安全超文本传输协议)、POP3(邮局协议-版本3)、IMAP4(Internet消息访问协议-版本4)、SMTP1.4.1IP协议�IP网络(即在网络层采用IP协议的网)中每台主机都有惟一的32位IP地址。�主机实际上有两个不同性质的地址:物理地址和IP地址。物理地址是由主机上的网卡来标识的,物理地址才是主机的真实地址。1.4.1IP协议�IP是面向包的协议,即数据被分成若干小数据包,然后分别传输它们。�IP网络上的主机只能直接向本地网上的其他主机(也就是具有相同IP网址的主机)发送数据包。1.4.1IP协议�如下图所示,主机A向同一个网络上的另一个主机B发包时,ARP会通过地址解析协议,获得对方的物理地址,然后把包发给对方。�ARP协议的运行机制为:主机A在网络上广播一个ARP消息:“要寻找地址为192.166.3.5的主机”,接着,具有这个IP地址的主机B就会做出响应,把自身的物理地址告诉主机A。1.4.1IP协议�当主机A向另一个网络上的主机B发送包时,主机A利用ARP协议找到本地网络上的路由器的物理地址,把包转发给它。路由器会按照如下步骤处理数据包:�(1)如果数据包的生命周期已到,则该数据包被抛弃。�(2)搜索路由表,优先搜索路由表中的主机,如果能找到具有目标IP地址的主机,则将数据包发送给该主机。�(3)如果匹配主机失败,则继续搜索路由表,匹配同子网的路由器,如果找到匹配的路由器,则将数据包转发给该路由器。�(4)如果匹配同子网的路有器失败,则继续搜索路由表,匹配同网络的路由器,如果找到匹配的路由器,则将数据包转发给该路由器。�(5)如果以上匹配操作都失败,就搜索默认路由,如果默认路由存在,则按照默认路由发送数据包,否则丢弃数据包。�IP协议并不保证一定把数据包送达目标主机,在发送过程中,会因为数据包结束生命周期,或者找不到路由而丢弃数据包。1.4.2TCP协议以及端口�IP协议在发送数据包时,途中会遇到各种事情,例如可能路由器突然崩溃,使包丢失。再例如一个包可能沿低速链路移动,而另一个包可能沿高速链路移动而超过前面的包,最后使得包的顺序搞乱。�TCP协议使两台主机上的进程顺利通信,不必担心包丢失或包顺序搞乱。TCP跟踪包顺序,并且在包顺序搞乱时按正确顺序重组包。如果包丢失,则TCP会请求源主机重发包。1.4.2TCP协议以及端口端口号的范围为0000到65535655356553565535,其中0000到1023102310231023的端口号一般固定分配给一些服务。比如FTPFTPFTPFTP服务(21)(21)(21)(21),SMTP(25)SMTP(25)SMTP(25)SMTP(25)服务,HTTP(25)HTTP(25)HTTP(25)HTTP(25)服务,135135135135端口分配给RPCRPCRP