第11章Java网络编程技术本章将介绍Java网络通信原理,重点介绍4个重要的类:URL、Socket、InetAddress、DatagramSocket,讲解它们在网络编程中的重要作用,详细讨论与之相关的类及其使用方法,并给出一个“客户/服务器”通信程序。Java支持TCP和UDP协议族。TCP用于网络的可靠的流式输入/输出。UDP支持更简单的、快速的、点对点的数据报模式。11.1网络通信基本知识11.2URL编程技术11.3TCP编程技术11.4UDP编程技术11.5本章小结内容简介11.1网络通信基本知识11.1.1网络通信基本概念11.1.2TCP协议和UDP协议11.1.3Java网络程序设计技术D.Descriptionofthecontents11.1.1网络通信基本概念计算机网络是指通过各种通信设备连接起来的、支持特定网络通信协议的、许许多多的计算机或计算机系统的集合。网络通信是指网络中的计算机通过网络互相传递信息。通信协议是网络通信的基础。通信协议是网络中计算机之间进行通信时共同遵守的规则。不同的通信协议用不同的方法解决不同类型的通信问题。常用的通信协议有HTTP,FTP,TCP/IP等。11.1.1网络通信基本概念为了实现网络上不同机器之间的通信着重介绍端口号域名地址IP地址11.1.1网络通信基本概念IP地址IP地址是计算机网络中任意一台计算机地址的唯一标识。知道了网络中某一台主机的IP地址,就可以定位这台计算机。通过这种地址标识,网络中的计算机可以互相定位和通信。目前,IP地址有两种格式,即IPV4格式和IPV6格式。IPV4是由4个字节数组成,中间以小数点分隔。IPV6是由16个字节组成,中间以冒号分隔。11.1.1网络通信基本概念域名地址域名地址是计算机网络中一台主机的标识名,也可以看做是IP地址的助记名。在Internet上,一个域名地址可以有多个IP地址与之相对应,一个IP地址也可以对应多个域名。通过主机名到IP地址的解析,可以由主机名得到对应的IP地址。在访问网上资源时,一般只需记住服务器的主机名就可以了。因为网络中的域名解析服务器可以根据主机名查出对应的IP地址。有了服务器的IP地址,就可以访问这个网站了。11.1.1网络通信基本概念端口号一台主机上允许有多个进程,这些进程都可以和网络上的其他计算机进行通信。更准确地说,网络通信的主体不是主机,而是主机中运行的进程。端口就是为了在一台主机上标识多个进程而采取的一种手段。主机名(或IP地址)和端口的组合能唯一确定网络通信的主体——进程。端口(port)是网络通信时同一主机上的不同进程的标识。11.1.2TCP协议和UDP协议1TCP(TransferControlProtocol的简称)协议是一种面向连接的、可以提供可靠传输的协议。使用T‘CP协议传输数据,接收端得到的是一个和发送端发出的完全一样的数据流。2UDP(UserDatagramProtocol的简称)是一种无连接的协议,它传输的是一种独立的数据报(Datagram)。每个数据报都是一个独立的信息,包括完整的源地址或目的地址。11.1.2TCP协议和UDP协议使用UDP协议时,每个数据报中都给出了完整的地址信息,因此无须建立发送方和接收方的连接。使用TCP协议时,在Socket之间进行数据传输之前必然要建立连接。UDP协议是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方,有可能会丢失。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。使用UDP协议传输数据是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP协议没有这方面的限制,一旦连接建立起来,双方的Socket就可以按统一的格式传输大量的数据。两种协议的比较11.1.3Java网络程序设计技术URL编程技术TCP编程技术UDP编程技术URL表示了Internet上某个资源的地址。通过URL标识,可以直接使用各种通信协议获取远端计算机上的资源信息,方便快捷地开发Internet应用程序。UDP是无连接的快速通信技术,数据报通信不需要建立连接,通信时所传输的数据报能否到达目的地、到达的时间、到达的次序都不能准确知道。TCP是可靠的连接通信技术,主要使用套接字(Socket)机制。TCP通信是使用TCP/IP协议、建立在稳定连接基础上的、以流传输数据的通信方式。11.2URL编程技术11.2.1URL和URL类111.2.2URLConnection类211.2.3InetAddress类311.2.1URL和URL类2.+•1.•3.1、URL的格式传输协议名://主机名:端口号/件名#引用传输协议名”指定获取资源所使用的传输协议,如http协议;“主机名”是网络中的计算机名或IP地址;“端口号”是计算机中代表一个服务的进程的编号;“文件名”是服务器上包括路径的文件名称;“引用”是文件中的标记,可用于同一个文件中不同位置的跳转。11.2.1URL和URL类2、URL类URL类是Java语言提供的支持URL编程的基础类,其类路径是java.net.URL。构造方法:URL(Stringspec):该构造方法根据指定的字符串创建URL对象。如果字符串指定了未知协议,则抛出MalformedURLException异常。URL(Stringprotocol,Stringhost,Stringfile):该构造方法根据指定的protocol名称、host名称和file名称创建URL。URL(Stringprotocol,Stringhost,intport,Stringfile):该构造方法根据指定protocol、host、port号和file创建URL对象。11.2.1URL和URL类【例11-1】使用URL类获取远端主机上指定文件的内容。创建一个参数为“”的URL对象,然后读取这个对象的文件。程序11.2.2URLConnection类1234TEXTTEXTTEXTTEXT应用程序和URL建立连接的步骤:通过在URL上调用openConnection方法创建连接对象处理设置参数和一般请求属性。远程对象变为可用。远程对象的头字段和内容变为可访问。使用connect方法建立到远程对象的实际连接11.2.2URLConnection类URLConnection类的几个主要变量如下1、URLConnection类的几个主要变量如下connectedurl2、URLConnection类的构造方法如下URLConnection(URLurl):创建参数为url的URLConnection对象。11.2.2URLConnection类3.URLConnection类的几个主要方法如下ObjectgetContent(),获取此URL连接的内容。StringgetContentEncoding(),返回该URL引用的资源的内容编码。intgetContentLength(),返回此连接的URL引用的资源的内容长度。StringgetContentType(),返回该URL引用的资源的内容类型。URLgetURL():返回此URLConnection的URL字段的值。InputStreamgetInputSTream():返回从所打开连接读数据的输入流。OutputStreamgetOutputSTream():返回向所打开连接写数据的输出流。publicvoidsetConnectTimeout(inttimeout):设置一个指定的超时值(以毫秒为单位)。11.2.2URLConnection类【例11-2】使用URLConnection类获取Web页面信息。功能实现:使用URLConnection显示网址“”相关信息。源程序如下。程序域名地址IP地址互联网上表示一个主机的地址有两种方式11.2.3InetAddress类11.2.3InetAddress类InetAddress类正是用来表示主机地址的,常用方法如下:staticInetAddressgetByAddress(byte[]addr):在给定原始IP地址的情况下,返回InetAddress对象。staticInetAddressgetByAddress(Stringhost,byte[]addr):根据提供的主机名和IP地址创建InetAddress。staticInetAddressgetByName(Stringhost):在给定主机名的情况下确定主机的IP地址。staticInetAddressgetLocalHost():返回本地主机。byte[]getAddress():返回此InetAddress对象的原始IP地址。StringgetHostAddress():返回IP地址字符串(以文本表现形式)。StringgetHostName():获取此IP地址的主机名。booleanisMulticastAddress():检查InetAddress是否是IP多播地址。booleanisReachable(inttimeout):测试是否可以达到该地址。StringtoString():将此IP地址转换为String。11.3TCP编程技术TCP/IP套接字用于在主机和Internet之间建立可靠的、双向的、持续的、点对点的流式连接。套接字用来建立Java的输入/输出系统到其他的驻留在本地机或Internet上的任何计算机的程序的连接。运用TCP协议通信时,客户机和服务器之间首先需要建立一个连接,然后,客户机端和服务器端程序各自将一个Socket对象与这个连接绑定,然后,两端的程序就可以通过和连接绑定的Socket对象来读写数据了。11.3.1网络套接字Socket11.3.2Socket类11.3.3ServerSocket类11.3TCP编程技术11.3.4C/S程序设计实例11.3.1网络套接字Socket服务器端ServerSocket服务器端的套接字始终在监听是否有连接请求,如果发现客户机端Socket.向服务器发出连接请求,且服务器端Socket向客户机端Socket发回“接受”的消息。按照套接字在网络中的作用分为客户机端Socket当客户机端发出的建立连接的请求被服务器端接受时,客户机上就会创建一个Socket对象。利用这个Socket对象,客户机就可以和服务器进行通信了。11.3.1网络套接字Socket关闭Socket对象按协议对Socket对象读/写操作打开连接到Socket对象的输入/输出流创建Socket对象工作过程包含以下四步11.3.2Socket类Socket类实现了客户机端的Socket,Socket对象可以用来向服务器发出连接请求,并换数据。Socket类常用的构造方法如下:Socket(InetAddressaddress,intport)此方法创建一个主机地址为address、端口号为port的流套接字,例如,以下语句:Socketmysocket=newSocket(218.198.118.112,2010);创建了一个Socket对象并赋初值,要连接的远程主机的IP地址是218.198.118.112,端口号是2010。11.3.2Socket类Socket类常用方法如下:InetAddressgetInetAddress():返回套接字连接的地址。InetAddressgetLocalAddress():获取套接字绑定的本地地址。intgetLocalPort():返回此套接字绑定到的本地端口。SocketAddressgetLocalSocketAddress():返回此套接字绑定的端点的地址,如果尚未绑定则返回null。InputStreamgetInputStream():返回此套接字的输入流。OutputStream