第12章网络编程设计_第1页
第12章网络编程设计_第2页
第12章网络编程设计_第3页
第12章网络编程设计_第4页
第12章网络编程设计_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第12章 网络程序设计主讲人:n本章将介绍本章将介绍Java网络通信原理,重点介绍网络通信原理,重点介绍4个重要的类:个重要的类:URL、Socket、InetAddress、DatagramSocket,讲解它们在网络,讲解它们在网络编程中的重要作用,详细讨论与之相关的类及其使用方法,并给编程中的重要作用,详细讨论与之相关的类及其使用方法,并给出一个出一个“客户客户/服务器服务器”通信程序。通信程序。Java支持支持TCP和和UDP协议族。协议族。TCP用于网络的可靠的流式输入用于网络的可靠的流式输入/输出。输出。UDP支持更简单的、快支持更简单的、快速的、点对点的数据报模式。速的、点对点的

2、数据报模式。 12.1 网络通信基础网络通信基础12.2 URL程序设计程序设计12.3 TCP程序设计程序设计12.4 UDP程序设计程序设计小结小结12.1 网络通信基础网络通信基础12.1.1 网络通信基本概念网络通信基本概念12.1.2 TCP协议和协议和UDP协议协议12.1.3 Java网络程序设计技术网络程序设计技术D. Description of the contents12.1.1 网络通信基本概念网络通信基本概念n 计算机网络是指通过各种通信设备连接起来的、支持特定网计算机网络是指通过各种通信设备连接起来的、支持特定网络通信协议的、许许多多的计算机或计算机系统的集合。网络

3、通络通信协议的、许许多多的计算机或计算机系统的集合。网络通信是指网络中的计算机通过网络互相传递信息。通信协议是网络信是指网络中的计算机通过网络互相传递信息。通信协议是网络通信的基础。通信协议是网络中计算机之间进行通信时共同遵守通信的基础。通信协议是网络中计算机之间进行通信时共同遵守的规则。不同的通信协议用不同的方法解决不同类型的通信问题。的规则。不同的通信协议用不同的方法解决不同类型的通信问题。常用的通信协议有常用的通信协议有HTTP,FTP,TCP/IP等等。12.1.1 网络通信基本概念网络通信基本概念为了实现网络上不同机器之间的通信为了实现网络上不同机器之间的通信着重介绍着重介绍端口号端

4、口号域名地址域名地址IP地址地址IP地址地址 IP地址是计算机网络中任意一台计算机地址的唯一标识。地址是计算机网络中任意一台计算机地址的唯一标识。知道了网络中某一台主机的知道了网络中某一台主机的IP地址,就可以定位这台计算机。地址,就可以定位这台计算机。通过这种地址标识,网络中的计算机可以互相定位和通信。通过这种地址标识,网络中的计算机可以互相定位和通信。目前,目前,IP地址有两种格式,即地址有两种格式,即IPV4格式和格式和IPV6格式。格式。 IPV4是由是由4个字节数组成,中间以小数点分隔。个字节数组成,中间以小数点分隔。 IPV6是由是由16个字节组成,中间以冒号分隔个字节组成,中间以

5、冒号分隔。 域名地址域名地址 域名地址是计算机网络中一台主机的标识名,也可以看做是域名地址是计算机网络中一台主机的标识名,也可以看做是IP地址的助记名。地址的助记名。 在在Internet上,一个域名地址可以有多个上,一个域名地址可以有多个IP地址与之相对应,地址与之相对应,一个一个IP地址也可以对应多个域名。通过主机名到地址也可以对应多个域名。通过主机名到IP地址的解析,地址的解析,可以由主机名得到对应的可以由主机名得到对应的IP地址。在访问网上资源时,一般只地址。在访问网上资源时,一般只需记住服务器的主机名就可以了。因为网络中的域名解析需记住服务器的主机名就可以了。因为网络中的域名解析服务

6、器可以根据主机名查出对应的服务器可以根据主机名查出对应的IP地址。有了服务器的地址。有了服务器的IP地址,地址,就可以访问这个网站了。就可以访问这个网站了。端口号端口号 一台主机上允许有多个进程,这些进程都可以和网络上的其一台主机上允许有多个进程,这些进程都可以和网络上的其 他计算机进行通信。更准确地说,网络通信的主体不是主机,而他计算机进行通信。更准确地说,网络通信的主体不是主机,而是主机中运行的进程。端口就是为了在一台主机上标识多个进程是主机中运行的进程。端口就是为了在一台主机上标识多个进程而采取的一种手段。主机名(或而采取的一种手段。主机名(或IPIP地址)和端口的组合能唯一确地址)和端

7、口的组合能唯一确定网络通信的主体定网络通信的主体进程。端口(进程。端口(portport)是网络通信时同一)是网络通信时同一主机上的不同进程的标识。主机上的不同进程的标识。 12.1.2 TCP协议和协议和UDP协议协议1TCP(Transfer Control Protocol的简称)协议是一种面向连接的、可以提供可靠传输的协议。使用TCP协议传输数据,接收端得到的是一个和发送端发出的完全一样的数据流 。2UDP(User Datagram Protocol的简称)是一种无连接的协议,它传输的是一种独立的数据报(Datagram)。每个数据报都是一个独立的信息,包括完整的源地址或目的地址。

8、12.1.2 TCP协议和协议和UDP协议协议 使用UDP协议时,每个数据报中都给出了完整的地址信息,因此无须建立发送方和接收方的连接。使用T C P 协 议 时 , 在Socket之间进行数据传输之前必然要建立连接。 UDP协议是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方,有可能会丢失。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。使用UDP协议传输数据是有大小限制的,每个被传输的数据报必须限定在64 KB之内。而TCP协议没有这方面的限制,一旦连接建立起来,双方的Socket就可以按统一的格式传输大量的数据。 两种协议的比较两种协议的

9、比较 URL编程技术编程技术 TCP编程技术编程技术 UDP编程技术编程技术 URL表示了表示了Internet上某个资源的地址。通过上某个资源的地址。通过URL标识,可以直接标识,可以直接使用各种通信协议获取远端计算机上的资源信息,方便快捷地开发使用各种通信协议获取远端计算机上的资源信息,方便快捷地开发Internet应用程序。应用程序。UDP是无连接的快速通信技术,数据报通信不需要建立连接,通信时是无连接的快速通信技术,数据报通信不需要建立连接,通信时所传输的数据报能否到达目的地、到达的时间、到达的次序都不能准所传输的数据报能否到达目的地、到达的时间、到达的次序都不能准确知道。确知道。TC

10、P是可靠的连接通信技术,主要使用套接字(是可靠的连接通信技术,主要使用套接字(Socket)机制。)机制。TCP通信是使用通信是使用TCP/IP协议、建立在稳定连接基础上的、以流传输数据协议、建立在稳定连接基础上的、以流传输数据的通信方式。的通信方式。12.2.1 URL12.2.1 URL和和URLURL类类112.2.2 URLConnection12.2.2 URLConnection类类212.2.3 InetAddress12.2.3 InetAddress类类312.2.1 URL和和URL类类2. + 3. 1、URL的格式的格式传输协议名传输协议名:/主机名主机名:端口号端口号

11、/件名件名#引用引用传输协议名传输协议名”指定获取资源所使用的传输协议,如指定获取资源所使用的传输协议,如http协议;协议;“主机名主机名”是网络中的计算机名或是网络中的计算机名或IP地址;地址;“端口号端口号”是计算机中代表一个服务的进程的编号;是计算机中代表一个服务的进程的编号;“文件名文件名”是服务器上包括路径的文件名称;是服务器上包括路径的文件名称;“引用引用”是文件中的标记,可用于同一个文件中不同位置的跳转。是文件中的标记,可用于同一个文件中不同位置的跳转。12.2.1 URL和和URL类类2、URL类类URL类是类是Java语言提供的支持语言提供的支持URL编程的基础类,其类路径

12、是编程的基础类,其类路径是.URL。 构造方法:构造方法:URL(String spec):该构造方法根据指定的字符串创建:该构造方法根据指定的字符串创建 URL 对象。如果字对象。如果字 符串指定了未知协议,则抛出符串指定了未知协议,则抛出MalformedURLException异常。异常。URL(String protocol, String host, String file):该构造方法根据指定的:该构造方法根据指定的 protocol名称、名称、host 名称和名称和 file 名称创建名称创建 URL。URL(String protocol, String host, int p

13、ort, String file):该构造方法根据:该构造方法根据指定指定 protocol、host、port 号和号和 file 创建创建 URL 对象。对象。12.2.1 URL和和URL类类【例例1】使用使用URL类获取远端主机上指定文件的内容。类获取远端主机上指定文件的内容。创建一个参数为创建一个参数为“http:/ 的的URL对象,然后读取这个对象的文件。对象,然后读取这个对象的文件。 程序程序12.2.2 URLConnection类类1234TEXTTEXTTEXTTEXT应用程序和应用程序和URL建立连接的步骤:建立连接的步骤:通过在通过在 URL 上调用上调用 openCo

14、nnection 方法创方法创建连接对象建连接对象 处理设置参处理设置参数和一般请数和一般请求属性。求属性。 远程对象变远程对象变为可用。远为可用。远程对象的头程对象的头字段和内容字段和内容变为可访问变为可访问。 使用使用 connect 方法建立到远方法建立到远程对象的实际程对象的实际连接连接 12.2.2 URLConnection类类URLConnection类的几个主要变量如下 1、URLConnection类的几个主要变量如下类的几个主要变量如下 connected url 2、URLConnection类的构造方法如下类的构造方法如下 URLConnection(URL url):

15、创建参数为:创建参数为url的的URLConnection对象。对象。12.2.2 URLConnection类类3URLConnection类的几个主要方法如下类的几个主要方法如下 Object getContent(),获取此,获取此URL 连接的内容。连接的内容。 String getContentEncoding(),返回该,返回该 URL 引用的资源的内容编码。引用的资源的内容编码。 int getContentLength(),返回此连接的,返回此连接的 URL 引用的资源的内容长度。引用的资源的内容长度。 String getContentType(),返回该,返回该 URL 引

16、用的资源的内容类型。引用的资源的内容类型。 URL getURL():返回此:返回此 URLConnection 的的 URL 字段的值。字段的值。InputStream getInputSTream():返回从所打开连接读数据的输入流。:返回从所打开连接读数据的输入流。OutputStream getOutputSTream():返回向所打开连接写数据的输出流。:返回向所打开连接写数据的输出流。public void setConnectTimeout(int timeout):设置一个指定的超时值:设置一个指定的超时值(以毫秒为单位)。(以毫秒为单位)。12.2.2 URLConnecti

17、on类类【例例2】使用使用URLConnection类获取类获取Web页面信息。页面信息。 功能实现:使用功能实现:使用URLConnection显示网址显示网址“http:/ 12.2.3 InetAddress类类12.2.3 InetAddress类类InetAddress类正是用来表示主机地址的,常用方法如下:类正是用来表示主机地址的,常用方法如下:static InetAddress getByAddress(byte addr):在给定原始 IP 地址的情况下,返回 InetAddress 对象。 static InetAddress getByAddress(String hos

18、t, byte addr):根据提供的主机名和 IP 地址创建 InetAddress。 static InetAddress getByName(String host):在给定主机名的情况下确定主机的 IP 地址。 static InetAddress getLocalHost():返回本地主机。 byte getAddress():返回此 InetAddress 对象的原始 IP 地址。 String getHostAddress():返回 IP 地址字符串(以文本表现形式)。 String getHostName():获取此 IP 地址的主机名。 boolean isMulticast

19、Address():检查 InetAddress 是否是 IP 多播地址。 boolean isReachable(int timeout):测试是否可以达到该地址。 String toString():将此 IP 地址转换为 String。 12.3 TCP程序设计程序设计 TCP/IP 套接字用于在主机和套接字用于在主机和Internet之间建立可靠的、双向的、之间建立可靠的、双向的、持续的、点对点的流式连接。套接字用来建立持续的、点对点的流式连接。套接字用来建立Java 的输入的输入/输出系输出系统到其他的驻留在本地机或统到其他的驻留在本地机或Internet上的任何计算机的程序的连接。

20、上的任何计算机的程序的连接。运用运用TCP协议通信时,客户机和服务器之间首先需要建立一个连协议通信时,客户机和服务器之间首先需要建立一个连接,然后,客户机端和服务器端程序各自将一个接,然后,客户机端和服务器端程序各自将一个Socket对象与这个对象与这个连接绑定,然后,两端的程序就可以通过和连接绑定的连接绑定,然后,两端的程序就可以通过和连接绑定的Socket对象对象来读写数据了。来读写数据了。12.3.1网络套接字网络套接字Socket 12.3.2 Socket类类12.3.3 ServerSocket类类12.3 TCP程序设计程序设计12.3.4 C/S程序设计实例程序设计实例12.3

21、.1网络套接字网络套接字Socket 服务器端服务器端ServerSocket 服务器端的套接字始终在 监听是否有连接请求,如 果发现客户机端Socket 向服务器发出连接请求, 且服务器端Socket向客户 机端Socket发回“接受”的消 息。按照套接字在网按照套接字在网络中的作用络中的作用 分为分为 客户机端客户机端Socket当客户机端发出的建立连接的请求被服务器端接受时,客户机上就会创建一个Socket对象。利用这个Socket对象,客户机就可以和服务器进行通信了。 12.3.1网络套接字网络套接字Socket 关闭Socket对象 按协议对Socket对象读/写操作 打开连接到So

22、cket对象的输入/输出流 创建Socket对象 工作过程包含以下四步工作过程包含以下四步 12.3.2 Socket类类nSocket类实现了客户机端的类实现了客户机端的Socket,Socket对象可以用来向对象可以用来向服务器发出连接请求,并换数据。服务器发出连接请求,并换数据。Socket类常用的构造方法如类常用的构造方法如下:下: Socket(InetAddress address, int port)n 此方法创建一个主机地址为此方法创建一个主机地址为address、端口号为、端口号为port的流套接的流套接字,例如,以下语句:字,例如,以下语句: Socket mysocket

23、 = new Socket (12, 2010);n创建了一个创建了一个Socket对象并赋初值,要连接的远程主机的对象并赋初值,要连接的远程主机的IP地地址是址是12,端口号是,端口号是2010。12.3.2 Socket类类Socket类常用方法如下类常用方法如下:InetAddress getInetAddress():返回套接字连接的地址。 InetAddress getLocalAddress():获取套接字绑定的本地地址。 int getLocalPort():返回此套接字绑定到的本地端口。 SocketAddress getLo

24、calSocketAddress():返回此套接字绑定的端点的地址,如果尚未绑定则返回 null。 InputStream getInputStream():返回此套接字的输入流。 OutputStream getOutputStream():返回此套接字的输出流。 int getPort():返回此套接字连接到的远程端口。 boolean isBound():返回套接字的绑定状态。 boolean isClosed():返回套接字的关闭状态。 boolean isConnected():返回套接字的连接状态。 void connect(SocketAddress endpoint, int

25、timeout):将此套接字连接到服务器,并指定一个超时值。 void close():关闭此套接字。12.3.3 ServerSocket类类ServerSocket() ServerSocket(int port) ServerSocket(int port, int backlog) ServerSocket类的类的构造方法构造方法ServerSocket(int port, int backlog, InetAddress bindAddr) Void bind(SocketAddress endpoint):将 ServerSocket 绑定到特定地址 Void bind(Socke

26、tAddress endpoint, int backlog):在有 多个 网卡的服务器上,将 ServerSocket 绑定到 特定地址。void close():关闭此套接字 ServerSocket类的类的常用方法常用方法Socket accept():侦听并接受到此套接字的连接 12.3.3 ServerSocket类类12.3.3 ServerSocket类类int getLocalPort():返回此套接字在其上侦听的端口。 SocketAddressgetLocalSocketAddress(): 返回此套接字绑定的端 点的地址,如果尚未绑 定则返回 null。boolean i

27、sBound():返回 ServerSocket 的绑定状态。 ServerSocket类的类的常用方法常用方法InetAddress getInetAddress():返回此服务器套接字的本地地址。 ContentsContentsString toString():作为 String 返回此套接字的实现地址和实现端口 ServerSocket类的类的常用方法常用方法boolean isClosed():返回 ServerSocket 的关闭状态。 12.3.3 ServerSocket类类12.3.4 C/S程序设计实例程序设计实例n【实例6】模拟用户存话费和手机漫游的C/S结构应用系统。

28、 功能实现:手机用户启动客户,向运行服务器软件功能实现:手机用户启动客户,向运行服务器软件的远端服务员交纳手机话费,请求服务员开通异地的远端服务员交纳手机话费,请求服务员开通异地漫游业务。漫游业务。程序程序n上节介绍了基于上节介绍了基于TCP的网络套接字(的网络套接字(Socket)编程技)编程技术,可以把套接字形象地比喻为打电话,一方呼叫,术,可以把套接字形象地比喻为打电话,一方呼叫,另一方负责监听,一旦建立了套接字连接,双方就可另一方负责监听,一旦建立了套接字连接,双方就可以进行通信了。本节将介绍以进行通信了。本节将介绍Java中基于中基于UDP(User Datagram Protoco

29、l,用户数据报协议)的网络信息,用户数据报协议)的网络信息传输方式。与传输方式。与TCP不同,不同,UDP是一种无连接的网络通是一种无连接的网络通信机制,更像邮件或短信息通信方式。信机制,更像邮件或短信息通信方式。12.4.1数据报通信基本概念数据报通信基本概念n数据报(数据报(Datagrams)是指起始点和目的地都使用)是指起始点和目的地都使用无连接网络服务的网络层的信息单元。基于无连接网络服务的网络层的信息单元。基于UDP协协议的通信和基于议的通信和基于TCP协议的通信不同,基于协议的通信不同,基于UDP协协议的信息传递更快,但不提供可靠性保证。也就是议的信息传递更快,但不提供可靠性保证

30、。也就是说,数据在传输时,用户无法知道数据能否正确到说,数据在传输时,用户无法知道数据能否正确到达目的地主机,也不能确定数据到达目的地的顺序达目的地主机,也不能确定数据到达目的地的顺序是否和发送的顺序相同。是否和发送的顺序相同。Java通过两个类实现通过两个类实现UDP协议顶层的数据报协议顶层的数据报 DatagramPacket DatagramSocket 12.4.2 DatagramPacket类类构造方法如下:构造方法如下:DatagramPacket(byte buf, int length): DatagramPacket(byte buf, int length, InetAd

31、dress address, int port) DatagramPacket(byte buf, int offset, int length) 构造数据包对象,用来构造数据包对象,用来 接收长度为接收长度为 length 的的 数据包。数据包。 构造数据报包,用来将长构造数据报包,用来将长度为度为 length 的包发送到指的包发送到指定主机上的指定端口号。定主机上的指定端口号。构造数据报包对象,用来构造数据报包对象,用来接收长度为接收长度为 length 的包,的包,在缓冲区中指定了偏移量在缓冲区中指定了偏移量。 12.4.2 DatagramPacket类类DatagramPacket

32、(byte buf, int offset, int length, InetAddress address, int port) DatagramPacket(byte buf, int offset, int length, SocketAddress address) DatagramPacket(byte buf, int length, SocketAddress address) 构造方法如下:构造方法如下:将长度为将长度为 length 偏移量偏移量为为 offset 的包发送到指定的包发送到指定主机上的指定端口号主机上的指定端口号 将长度为将长度为 length 偏移量偏移量为

33、为 offset 的包发送到指定的包发送到指定主机上的指定端口号主机上的指定端口号 构造数据报包,用来将长度为构造数据报包,用来将长度为 length 的包发送到指定主机的包发送到指定主机上的指定端口号。上的指定端口号。 DatagramPacket类的常用方法类的常用方法 byte getData() int getLength() int getPort() SocketAddress getSocketAddress() InetAddress getAddress() int getOffset() 12.4.2 DatagramPacket类类12.4.2 DatagramPacke

34、t类类DatagramPacket类的常用方法类的常用方法 void setData(byte buf) void setData(byte buf, int offset, int length) void setPort(int iport) void setSocketAddress(SocketAddress address) void setAddress(InetAddress iaddr) void setLength(int length) 12.4.3 DatagramSocket类类DatagramSocket 类的常用方法类的常用方法 void bind(SocketAd

35、dress addr) void close() void connect(SocketAddress addr) void connect(InetAddress address, int port) 12.4.3 DatagramSocket类类 DatagramSocket 类的常用方法类的常用方法 void disconnect() InetAddress getInetAddress() int getLocalPort() InetAddress getLocalAddress() 12.4.3 DatagramSocket类类 DatagramSocket 类的常用方法类的常用方

36、法 SocketAddress getLocalSocketAddress() SocketAddress getRemoteSocketAddress() void send(DatagramPacket p) void receive(DatagramPacket p) 12.4.3 DatagramSocket类类n【实例8】 设计点对点的快速通信系统 功能实现:实现局域网内两台主机之间的通信,要功能实现:实现局域网内两台主机之间的通信,要求用图形界面实现。求用图形界面实现。 分析:本系统属于互为服务器和客户机的网络应用分析:本系统属于互为服务器和客户机的网络应用系统,采用系统,采用UD

37、P数据报编程技术可以实现快速的点数据报编程技术可以实现快速的点对点通信。图形用户界面采用对点通信。图形用户界面采用Swing组件来实现。组件来实现。以主机以主机1和主机和主机2表示两台主机。表示两台主机。程序程序12.4.4 MulticastSocket类类n单播(单播(Unicast)、多播()、多播(Multicast)和广播()和广播(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。单播这三个术语都是用来描述网络节点之间通讯方式的术语。单播是指对特定的主机进行数据传送。多播也成组播,就是给一组是指对特定的主机进行数据传送。多播也成组播,就是给一组特定的主机(多播组)发送数据。广播是多播的特例,是给某特定的主机(多播组)发送数据。广播

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论