Java高级程序设计
Java高级程序设计
? 第一部分
– 第一章 Java入门基础
– 第二章 异常
– 第三章 Java Applet类型
– 第四章 图形用户界面 GUI(一) ——AWT
– 第五章 Java中的事件处理机制
– 第六章 图形用户界面 GUI(二) ——Swing
Java高级程序设计
– 第七章 多线程
– 第八章 I/O输入输出流
– 第九章 Java数据库连接( JDBC)
– 第十章 Java网络编程
? 第二部分
– 第一章 Java API
– 第二章 Java与多媒体
– 第三章 Java Bean基础
Java高级程序设计 Java网络编程
Java网络编程
? 10.1 网络编程基础
– 10.1.1 统一资源定位( URL)
– 10.1.2 Internet编址和端口号
– 10.1.3 客户 /服务器模式
– 10.1.4 代理服务器
– 10.1.5 TCP/IP与 UDP协议
? 10.2 Java和网络
– 10.2.1 网络类和接口
– 10.2.2 InetAddress类
– 10.2.3 URL类
– 10.2.4 URLConnection类
Java高级程序设计 Java网络编程
Java网络编程
? 10.3 Java编写 TCP网络程序
– 10.3.1 套接字概述
– 10.3.2 TCP/IP客户端套接字
– 10.3.3 TCP/IP服务器套接字
? 10.4 Java编写 UDP网络程序
– 10.4.1 数据报服务器和客户
– 10.4.2 组播数据报
Java高级程序设计 Java网络编程
10.1 网络编程基础
– 统一资源定位( URL)
? URL( Rniform Resource Locator,统一资源定位),代
表了资源在 Internet/Intranet上的位置,是网上资源的一
个指针。该资源可以是一个简单的文件,或者一个目录,
也可以是一个复杂的对象(例如:对数据库的查询或一
个搜索引擎)。
? 一个完整的 URL的格式如下:
协议,//主机域名:端口 /路径文件名 /#锚点?请求字符串
Java高级程序设计 Java网络编程
10.1 网络编程基础
? Internet 编址与端口号
– Internet上的每一台计算机都有一个地址。 Internet
地址是网络上标识每台计算机的惟一定义的数。 IP
地址有 32位,我们通常把它们分成 4个从 0到 255的,
有点号(,)隔开的序列。
– 为了使用和记忆方便,也为了便于网络地址的分层
管理和分配,INTERNET在 1984年采用了域名管理
系统( DOMAINNAMESYSTEM)。
Java高级程序设计 Java网络编程
10.1 网络编程基础
– 本地操作系统会给那些有需求的进程分配协议端口
( protocol port,即我们常说的端口),每个协议
端口由一个正整数标识。当目的主机接收到数据报
后,将根据报文首部的目的端口号,把数据发送到
相应端口,而与此端口相对应的那个进程将会领取
数据并等待下一组数据的到来。
– 不光接受数据报的进程需要开启它自己的端口,发
送数据报的进程也需要开启端口,这样,数据报中
将会标识有源端口,以便接受方能顺利的回传数据
报到这个端口。
Java高级程序设计 Java网络编程
10.1 网络编程基础
? 客户 /服务器模式
– 在客户机 /服务器( client/server)中,主机叫做服务器,网
络通常是局域网( LAN)或是广域网( WAN)。每一台 PC
机都叫做一个客户机,都有访问网络的功能,允许在客户机
和服务器之间通信因此叫客户机 /服务器模式,其思想是:
Internet上的一些计算机运行服务程序,充当专门提供服务
的服务器,其它需要服务的计算机作为客户机。当用户需要
某项服务时,客户计算机(客户程序)通过网络与能提供该
种服务的服务器建立连接,向它发出服务请求,服务器根据
该请求作出相应的处理,并返还处理结果。
Java高级程序设计 Java网络编程
10.1 网络编程基础
? 代理服务器
– 代理服务器英文全称是 Proxy Server,其功能就是代理网络
用户去取得网络信息。形象的说:它是网络信息的中转站。
在一般情况下,我们使用网络浏览器直接去连接其他
Internet站点取得网络信息时,是直接联系到目的站点服务
器,然后由目的站点服务器把信息传送回来。代理服务器是
介于浏览器和 Web服务器之间的另一台服务器,有了它之后,
浏览器不是直接到 Web服务器去取回网页而是向代理服务器
发出请求,信号会先送到代理服务器,由代理服务器来取回
浏览器所需要的信息并传送给你的浏览器。
Java高级程序设计 Java网络编程
10.1 网络编程基础
? TCP/IP协议
– TCP/IP是英文 Transmission Control
Protocol/Internet Protocol的缩写,意思是 "传输控
制协议 /网际协议 "。虽然从名字上看 TCP/IP包括两
个协议,传输控制协议( TCP)和网际协议( IP),
但 TCP/IP实际上是一组协议,它包括上百个各种功
能的协议,如:远程登录、文件传输和电子邮件等,
而 TCP协议和 IP协议是保证数据完整传输的两个基
本的重要协议。
Java高级程序设计 Java网络编程
10.1 网络编程基础
– TCP/IP协议的基本传输单位是数据包 ( datagram),
TCP协议负责把数据分成若干个数据包,并给每个
数据包加上包头(就像给一封信加上信封),包头
上有相应的编号,以保证在数据接收端能将数据还
原为原来的格式,IP协议在每个包头上再加上接收
端主机地址,这样数据找到自己要去的地方(就像
信封上要写明地址一样),如果传输过程中出现数
据丢失、数据失真等情况,TCP协议会自动要求数
据重新传输,并重新组包。总之,IP协议保证数据
的传输,TCP协议保证数据传输的质量。
Java高级程序设计 Java网络编程
10.1 网络编程基础
? UDP协议
– UDP协议是英文 User Datagram Protocol的缩写,
即用户数据报协议,主要用来支持那些需要在计算
机之间传输数据的网络应用。 UDP协议的主要作用
是将网络数据流量压缩成数据报的形式。一个典型
的数据报就是一个二进制数据的传输单位。每一个
数据报的前 8个字节用来包含报头信息,剩余字节
则用来包含具体的传输数据。
Java高级程序设计 Java网络编程
10.1 网络编程基础
? TCP协议和 UDP协议的区别
– UDP和 TCP协议的主要区别是两者在如何实现信息的可靠传
递方面不同。 TCP协议中包含了专门的传递保证机制,当数
据接收方收到发送方传来的信息时,会自动向发送方发出确
认消息;发送方只有在接收到该确认消息之后才继续传送其
它信息,否则将一直等待直到收到确认信息为止。
– 与 TCP不同,UDP协议并不提供数据传送的保证机制。如果
在从发送方到接收方的传递过程中出现数据报的丢失,协议
本身并不能做出任何检测或提示。因此,通常人们把 UDP协
议称为不可靠的传输协议。
Java高级程序设计 Java网络编程
10.2 Java和网络
? 网络类和接口
– Java的网络 API所提供的基本网络类,都包含在
java.net包中。
Java高级程序设计 Java网络编程
10.2 Java和网络
? InetAddress类
– 在 Java中 java,net,InetAddress类的对象封装了远
程主机的 IP地址和域名,其中包含很多和 Java网络
编程有关的方法和属性。
– InetAddress类没有公共的构造方法,但是可以通过
一些静态的方法来得到 InetAddress对象。
Java高级程序设计 Java网络编程
10.2 Java和网络
? InetAddress类的常用方法:
Java高级程序设计 Java网络编程
10.2 Java和网络
? URL类
– Java预制了 java,net,URL类来解决网络资源的传
输问题。它提供了许多方法来完成对远程站点的访
问和操作。
– URL类常用一些 get方法获取 URL的信息,除了端口
为 int类型外其余都是 String类型的。
Java高级程序设计 Java网络编程
10.2 Java和网络
? URLConnection类
– URLConnection类是一个抽象,是实现应用程序和
URL之间通信连接的所有类的超类,该类的实例可
以用来读写 URL所指的资源。在创建了 URL对象之
后,可以使用该 URL对象的 openConnection方法来
创建 URLConnection对象,之后就可以使用该类的
方法完成各种各样的操作 。
Java高级程序设计 Java网络编程
10.3 Java编写 TCP
网络程序
? 套接字概述
– 套接字( socket)为两台计算机之间的通信提供了
一种机制,应用层通过传输层进行数据通信时,
TCP和 UDP会遇到同时为多个应用程序进程提供并
发服务的问题。多个 TCP连接或多个应用程序进程
可能需要通过同一个 TCP协议端口传输数据。为了
区别不同的应用程序进程和连接,许多计算机操作
系统为应用程序与 TCP/IP协议交互提供了称为套接
字的接口。
Java高级程序设计 Java网络编程
10.3 Java编写 TCP
网络程序
? TCP/IP客户套接字
– 当客户程序需要与服务器程序通信的时候,客户程序在客户
机创建一个 socket套接字对象,Socket类有几个构造方法。
两个常用的构造方法是,
? Socket(InetAddress addr,int port)
? Socket(String host,int port)
– Socket对象通过调用 getInputStream( )方法从服务程序获得
输入流读传送来的信息,也可通过调用 getOutputStream( )
方法获得输出流来发送消息。在读写活动完成之后,客户程
序调用 close( )方法关闭流和流套接字 。
Java高级程序设计 Java网络编程
10.3 Java编写 TCP
网络程序
? TCP/IP服务器套接字
– 服务程序也要使用流套接字。这就要创建一个
ServerSocket对象,ServerSocket有几个构造方法,
最简单的是 ServerSocket(int port),创建一个
ServerSocket对象,port参数传递端口号,这个端
口就是服务器监听连接请求的端口。
– ServerSocket对象调用 accept( )方法,将导致 调用
线程阻塞直到连接建立 。在建立连接后 accept( )返
回一个最近创建的 Socket对象,该 Socket对象绑定
了客户程序的 IP地址或端口号。
Java高级程序设计 Java网络编程
10.4 Java编写 UDP
网络程序
? 数据报服务器和客户
– 为减少流套接字连接花费的时间,Java网络 API提
供了第二种套接字:自寻址套接字。自寻址使用
UDP发送寻址信息。
– 自寻址套接字工作有下面三个类,DatagramPacket,
DatagramSocket和 MulticastSocket。 DatagramPacket对
象描绘了自寻址包的地址信息,DatagramSocket表示
客户程序和服务程序自寻址套接字,MulticastSocket
描绘能进行多点传送的自寻址套接字,这三个类位
于 java.net包内。
Java高级程序设计 Java网络编程
10.4 Java编写 UDP
网络程序
– DatagramSocket类在客户端创建自寻址套接字与
服务器端进行通信连接,并发送和接受自寻址套接
字。
– 虽然有多个构造方法可供选择,但创建客户端自寻
址套接字最便利的选择是 DatagramSocket( )方法,
而服务器端则是 DatagramSocket(int port)方法。
– 一旦程序创建了 DatagramSocket对象,那么程序
分别调用了 send(DatagramPacket dgp)和
receive(DatagramPacket dgp)来发送和接收自寻
址数据包。
Java高级程序设计 Java网络编程
10.4 Java编写 UDP
网络程序
? 组播数据报
– 如果服务器程序要将同一信息发送给多个客户端,
那么服务器程序和客户程序可以利用多点传送方式
进行通信。多点传送就是服务程序对专用的多点传
送组的 IP地址和端口发送一系列自寻址数据包,通
过加入操作 IP地址被多点传送 Socket注册,通过这
个点客户程序可以接收发送给组的自寻址包(同样
客户程序也可以给这个组发送自寻址包),一旦客
户程序读完所有要读的自寻址数据包,那么可以通
过调用离开组操作离开多点传送组。
Java高级程序设计 Java网络编程
10.4 Java编写 UDP
网络程序
– 网络 API通过 MulticastSocket类支持多点传送,当
一个客户程序要加入多点传送组时,就创建一个
MulticastSocket对象。 MulticastSocket(int port)构
造方法允许应用程序指定端口(通过 port参数)接
收自寻址包,端口必须与服务程序的端口号相匹配,
要加入多点传送组,客户程序调用 joinGroup( )方法,
同样要离开传送组,也要调用 leaveGroup()方法。
由于 MulticastSocket类扩展 DatagramSocket类,一个
MulticastSocket对象就有权访问 DatagramSocket类中的
方法。
Java高级程序设计 Java网络编程
小结
? 掌握:
– URL,套接字和数据报
– 使用套接字和数据报技术实现 Java的网络应用程序
? 理解:
– 如何实现基于网络的应用程序
? 了解:
– 网络的基本概念