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

下载本文档

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

文档简介

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

12.1网络通信基础12.2URL程序设计12.3TCP程序设计12.4UDP程序设计小结内容简介12.1网络通信基础12.1.1网络通信基本概念12.1.2TCP协议和UDP协议12.1.3Java网络程序设计技术D.Descriptionofthecontents12.1.1网络通信基本概念

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

IP地址是计算机网络中任意一台计算机地址的唯一标识。知道了网络中某一台主机的IP地址,就可以定位这台计算机。通过这种地址标识,网络中的计算机可以互相定位和通信。目前,IP地址有两种格式,即IPV4格式和IPV6格式。

IPV4是由4个字节数组成,中间以小数点分隔。

IPV6是由16个字节组成,中间以冒号分隔。

12.1.1网络通信基本概念域名地址

域名地址是计算机网络中一台主机的标识名,也可以看做是IP地址的助记名。在Internet上,一个域名地址可以有多个IP地址与之相对应,一个IP地址也可以对应多个域名。通过主机名到IP地址的解析,可以由主机名得到对应的IP地址。在访问网上资源时,一般只需记住服务器的主机名就可以了。因为网络中的域名解析服务器可以根据主机名查出对应的IP地址。有了服务器的IP地址,就可以访问这个网站了。12.1.1网络通信基本概念端口号

一台主机上允许有多个进程,这些进程都可以和网络上的其他计算机进行通信。更准确地说,网络通信的主体不是主机,而是主机中运行的进程。端口就是为了在一台主机上标识多个进程而采取的一种手段。主机名(或IP地址)和端口的组合能唯一确定网络通信的主体——进程。端口(port)是网络通信时同一主机上的不同进程的标识。

12.1.2TCP协议和UDP协议1TCP(TransferControlProtocol的简称)协议是一种面向连接的、可以提供可靠传输的协议。使用T‘CP协议传输数据,接收端得到的是一个和发送端发出的完全一样的数据流。2UDP(UserDatagramProtocol的简称)是一种无连接的协议,它传输的是一种独立的数据报(Datagram)。每个数据报都是一个独立的信息,包括完整的源地址或目的地址。12.1.2TCP协议和UDP协议

使用UDP协议时,每个数据报中都给出了完整的地址信息,因此无须建立发送方和接收方的连接。使用TCP协议时,在Socket之间进行数据传输之前必然要建立连接。

UDP协议是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方,有可能会丢失。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。0102使用UDP协议传输数据是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP协议没有这方面的限制,一旦连接建立起来,双方的Socket就可以按统一的格式传输大量的数据。03两种协议的比较12.1.3Java网络程序设计技术

URL编程技术

TCP编程技术

UDP编程技术

URL表示了Internet上某个资源的地址。通过URL标识,可以直接使用各种通信协议获取远端计算机上的资源信息,方便快捷地开发Internet应用程序。UDP是无连接的快速通信技术,数据报通信不需要建立连接,通信时所传输的数据报能否到达目的地、到达的时间、到达的次序都不能准确知道。TCP是可靠的连接通信技术,主要使用套接字(Socket)机制。TCP通信是使用TCP/IP协议、建立在稳定连接基础上的、以流传输数据的通信方式。12.2URL程序设计12.2.1URL和URL类112.2.2URLConnection类212.2.3InetAddress类312.2.1URL和URL类2.+

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

构造方法:URL(Stringspec):该构造方法根据指定的字符串创建URL对象。如果字符串指定了未知协议,则抛出MalformedURLException异常。URL(Stringprotocol,Stringhost,Stringfile):该构造方法根据指定的protocol名称、host名称和file名称创建URL。URL(Stringprotocol,Stringhost,intport,Stringfile):该构造方法根据指定protocol、host、port号和file创建URL对象。12.2.1URL和URL类【例1】使用URL类获取远端主机上指定文件的内容。创建一个参数为“/index.html”

的URL对象,然后读取这个对象的文件。

程序12.2.2URLConnection类1234TEXTTEXTTEXTTEXT应用程序和URL建立连接的步骤:通过在URL上调用openConnection方法创建连接对象

处理设置参数和一般请求属性。远程对象变为可用。远程对象的头字段和内容变为可访问。

使用connect方法建立到远程对象的实际连接12.2.2URLConnection类URLConnection类的几个主要变量如下1、URLConnection类的几个主要变量如下

connected

url2、URLConnection类的构造方法如下

URLConnection(URLurl):创建参数为url的URLConnection对象。12.2.2URLConnection类3.URLConnection类的几个主要方法如下

ObjectgetContent(),获取此URL连接的内容。StringgetContentEncoding(),返回该URL引用的资源的内容编码。intgetContentLength(),返回此连接的URL引用的资源的内容长度。StringgetContentType(),返回该URL引用的资源的内容类型。URLgetURL():返回此URLConnection的URL字段的值。InputStreamgetInputSTream():返回从所打开连接读数据的输入流。OutputStreamgetOutputSTream():返回向所打开连接写数据的输出流。publicvoidsetConnectTimeout(inttimeout):设置一个指定的超时值(以毫秒为单位)。12.2.2URLConnection类【例2】使用URLConnection类获取Web页面信息。功能实现:使用URLConnection显示网址“/index.htm”相关信息。源程序如下。程序域名地址IP地址互联网上表示一个主机的地址有两种方式

12.2.3InetAddress类12.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。

12.3TCP程序设计

TCP/IP套接字用于在主机和Internet之间建立可靠的、双向的、持续的、点对点的流式连接。套接字用来建立Java的输入/输出系统到其他的驻留在本地机或Internet上的任何计算机的程序的连接。运用TCP协议通信时,客户机和服务器之间首先需要建立一个连接,然后,客户机端和服务器端程序各自将一个Socket对象与这个连接绑定,然后,两端的程序就可以通过和连接绑定的Socket对象来读写数据了。12.3.1网络套接字Socket

12.3.2Socket类12.3.3ServerSocket类12.3TCP程序设计12.3.4C/S程序设计实例12.3.1网络套接字Socket服务器端ServerSocket

服务器端的套接字始终在监听是否有连接请求,如果发现客户机端Socket.向服务器发出连接请求,且服务器端Socket向客户机端Socket发回“接受”的消息。按照套接字在网络中的作用分为

客户机端Socket当客户机端发出的建立连接的请求被服务器端接受时,客户机上就会创建一个Socket对象。利用这个Socket对象,客户机就可以和服务器进行通信了。12.3.1网络套接字Socket关闭Socket对象按协议对Socket对象读/写操作打开连接到Socket对象的输入/输出流

创建Socket对象

工作过程包含以下四步

12.3.2Socket类Socket类实现了客户机端的Socket,Socket对象可以用来向服务器发出连接请求,并换数据。Socket类常用的构造方法如下:

Socket(InetAddressaddress,intport)

此方法创建一个主机地址为address、端口号为port的流套接字,例如,以下语句:

Socketmysocket=newSocket("12",2010);创建了一个Socket对象并赋初值,要连接的远程主机的IP地址是12,端口号是2010。12.3.2Socket类Socket类常用方法如下:InetAddressgetInetAddress():返回套接字连接的地址。

InetAddressgetLocalAddress():获取套接字绑定的本地地址。

intgetLocalPort():返回此套接字绑定到的本地端口。

SocketAddressgetLocalSocketAddress():返回此套接字绑定的端点的地址,如果尚未绑定则返回null。InputStreamgetInputStream():返回此套接字的输入流。

OutputStreamgetOutputStream():返回此套接字的输出流。

intgetPort():返回此套接字连接到的远程端口。

booleanisBound():返回套接字的绑定状态。

booleanisClosed():返回套接字的关闭状态。

booleanisConnected():返回套接字的连接状态。

voidconnect(SocketAddressendpoint,inttimeout):将此套接字连接到服务器,并指定一个超时值。

voidclose():关闭此套接字。12.3.3ServerSocket类ServerSocket()

ServerSocket(intport)

ServerSocket(intport,intbacklog)

ServerSocket类的构造方法ServerSocket(intport,intbacklog,InetAddressbindAddr)Voidbind(SocketAddressendpoint):将ServerSocket绑定到特定地址Voidbind(SocketAddressendpoint,intbacklog):在有多个网卡的服务器上,将

ServerSocket绑定到特定地址。voidclose():关闭此套接字

ServerSocket类的常用方法Socketaccept():侦听并接受到此套接字的连接12.3.3ServerSocket类12.3.3ServerSocket类intgetLocalPort():返回此套接字在其上侦听的端口。SocketAddressgetLocalSocketAddress():返回此套接字绑定的端点的地址,如果尚未绑定则返回null。booleanisBound():返回ServerSocket的绑定状态。ServerSocket类的常用方法InetAddressgetInetAddress():返回此服务器套接字的本地地址。

ContentsContentsStringtoString():作为String返回此套接字的实现地址和实现端口ServerSocket类的常用方法booleanisClosed():返回ServerSocket的关闭状态。12.3.3ServerSocket类12.3.4C/S程序设计实例【实例6】模拟用户存话费和手机漫游的C/S结构应用系统。功能实现:手机用户启动客户,向运行服务器软件的远端服务员交纳手机话费,请求服务员开通异地漫游业务。程序12.4UDP程序设计上节介绍了基于TCP的网络套接字(Socket)编程技术,可以把套接字形象地比喻为打电话,一方呼叫,另一方负责监听,一旦建立了套接字连接,双方就可以进行通信了。本节将介绍Java中基于UDP(UserDatagramProtocol,用户数据报协议)的网络信息传输方式。与TCP不同,UDP是一种无连接的网络通信机制,更像邮件或短信息通信方式。12.4UDP程序设计12.4.2DatagramPacket类12.4.3DatagramSocket类12.4.4MulticastSocket类12.4.1数据报通信基本概念12.4.1数据报通信基本概念数据报(Datagrams)是指起始点和目的地都使用无连接网络服务的网络层的信息单元。基于UDP协议的通信和基于TCP协议的通信不同,基于UDP协议的信息传递更快,但不提供可靠性保证。也就是说,数据在传输时,用户无法知道数据能否正确到达目的地主机,也不能确定数据到达目的地的顺序是否和发送的顺序相同。12.4.1数据报通信基本概念Java通过两个类实现UDP协议顶层的数据报

DatagramPacket

DatagramSocket

12.4.2DatagramPacket类构造方法如下:DatagramPacket(byte[]buf,intlength):

DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)

DatagramPacket(byte[]buf,intoffset,intlength)构造数据包对象,用来接收长度为length的数据包。

构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。构造数据报包对象,用来接收长度为length的包,在缓冲区中指定了偏移量。

12.4.2DatagramPacket类DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddress,intport)

DatagramPacket(byte[]buf,intoffset,intlength,SocketAddressaddress)

DatagramPacket(byte[]buf,intlength,SocketAddressaddress)

构造方法如下:将长度为length偏移量为offset的包发送到指定主机上的指定端口号

将长度为length偏移量为offset的包发送到指定主机上的指定端口号

构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。

DatagramPacket类的常用方法

byte[]getData()

intgetLength()

intgetPort()

SocketAddressgetSocketAddress()

InetAddressgetAddress()

intgetOffset()

12.4.2DatagramPacket类12.4.2DatagramPacket类DatagramPacket类的常用方法

voidsetData(byte[]buf)

voidsetData(byte[]buf,intoffset,intlength)

voidsetPort(intiport)

voidsetSocketAddress(SocketAddressaddress)

voidsetAddress(InetAddressiaddr)

voidsetLength(intlength)

12.4.3DatagramSocket类DatagramSocket

类的常用方法

voidbind(SocketAddressaddr)

voidclose()

voidconnect(SocketAddressaddr)

voidconnect(InetAddressaddress,intport)12.4.3DatagramSocket类

DatagramSocket

类的常用方法

voiddisconnect()

InetAddressgetInetAddress()

intgetLocalPort()

InetAddressgetLocalAddress()

12.4.3DatagramSocket类

DatagramSocket

类的常用方法

SocketAddressgetLocalSocketAddress()

SocketAddressgetRemoteSocketAddress()

voidsend(DatagramPacketp)

voidreceive(DatagramPacketp)

12.4.3DatagramSocket类【实例8】设计点对点的快速通信系统功能实现:实现局域网内两台主机之间的通信,要求用图形界面实现。分析:本系统属于互为服务器和客户机的网络应用系统,采用UDP数据报编程技术可以实现快速的点对点通信。图形用户界面采用Swing组件来实现。以主机1和主机2表示两台主机。程序12.4.4MulticastSoc

温馨提示

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

评论

0/150

提交评论