1第11章Java网络编_第1页
1第11章Java网络编_第2页
1第11章Java网络编_第3页
1第11章Java网络编_第4页
1第11章Java网络编_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、 在internet(互联网)被广泛使用的今天,网络编程显得日益重要。网络应用是java语言取得成功的领域之一,它已经成为现在internet上最流行的一种编程语言。 java语言的网络功能非常强大,其网络类库不仅使我们可以开发访问internet应用层程序,还可以实现网络底层的通信。 本章要点本章要点l11.1 网络基础网络基础l11.2 inetaddress编程编程l11.3 url编程编程l11.4 socket编程编程l11.5 数据报通信数据报通信l思考与练习思考与练习11 11.1.1 tcp/ip协议协议网络通信协议是计算机间进行通信所要遵循的各种规则的集合。internet的

2、主要协议有:网络层的ip协议,传输层的tcp、udp协议,应用层的ftp、http、smtp等协议。其中,tcp/ip(传输控制协议/网间协议)是internet的主要协议,定义了计算机和外设进行通信所使用的规则。tcp/ip网络参考模型包括四个层次:应用层、传输层、网络层、链路层。连接到tcp/ip网络中的每台计算机(或其他设备)都有唯一的地址,这就是ip地址。ip地址实质上是一个32位的整数,通常以“%d.%d.%d.%d”的形式表示,其中每个d是一个8位整数。在tcp/ip网络中,不同的机器之间进行通信时,数据的传输是由传输层控制的,这包括数据要发往的目标机器及应用程序、数据的质量控制等

3、。 tcp/ip网络中最常用的传输协议tcp(transport control protocol)和udp(user datagram protocol)就属于这一层。 11.1.1 tcp/ip协议协议传输层通常以tcp和udp协议来控制端点到端点的通信。用于通信的端点是由socket来定义的,而socket是由ip地址和端口号组成的。tcp是一种面向连接的保证可靠传输的协议。通过tcp协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在tcp协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,

4、另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。 11.1.2 通信端口通信端口一台机器只通过一条链路连接到网络上,但一台机器中往往有很多应用程序需要进行网络通信,如何区分呢?这就要靠网络端口号(port)了。端口号是一个标记机器的逻辑通信信道的正整数,端口号不是物理实体。ip地址和端口号组成了所谓的socket,socket是网络上运行的程序之间双向通信链路的最后终结点,它是tcp和udp的基础。ip协议使用ip地址使数据投递到正确的计算机上,tcp和udp协议使用端口号(port)将数据投递给正确的应用程序。端口

5、号是用一个16位的整数来表达的,其范围为065535,其中01023为系统所保留,专门给那些通用的服务(well-known services),常见的有:http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口为23等等。因此,当我们编写通信程序时,应选择一个大于1023的数作为端口号,以免发生冲突。 11.1.3 urlurl是统一资源定位符(uniform resource locator)的简称,它表示internet上某一资源的地址。internet上的资源包括html文件、图像文件、声音文件、动画文件以及其他任何内容(并不完全是文件,也可以是一个对数据库的查询等

6、)。通过url,就可以访问internet。浏览器或其他程序通过解析给定的url就可以在网络上查找相应的文件或其他资源。一个url包括两部分内容:协议名称和资源名称,中间用冒号隔开:协议名:/资源名如:http:/协议名称指的就是获取资源时所使用的应用层协议,如http,ftp,file等;资源名称则是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。当然,并不是所有的url都必须包含这些内容。一个完整的url如下:http:/:80/home/white_paper.html#intro_1协议 主机域名(ip地址)端口号 目录文件名 html参考点 11.1.4 客户机客户机

7、/服务器模式服务器模式目前较为流行的网络编程模型是客户机/服务器(c/s)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。 11.1.5 java网络编程网络编程java 通过前面介绍的流式输入/输出接口和增加在网络上建立输入/输出对象特性这两个方法支持tcp/ip。java支持tcp和udp协议族。tcp用于网络的可靠的流式输入/输出。udp支持更简单的、快速的、点对点的数据报模式。java的网络

8、编程分为三个层次:1最高一级的网络通信就是我们前面章节中讲的从网络上下载applet。客户端浏览器通过html文件中的标记来识别applet,并解析applet的属性,通过网络获取applet的字节码文件。2前面我们介绍了声音播放和图像显示,其中声音文件和图像文件的获取是次一级的通信。通过类url的对象指明文件所在位置,并从网络上下载声音和图像文件。 11.1.5 java网络编程网络编程3.最低一级的通信是利用包中提供的类直接在程序中实现网络通信。针对网络通信的不同层次,java提供的网络功能有四大类:inetaddress 、urls、sockets、datagram。(1)urls:面向

9、应用层。通过url,java程序可以直接送出或读入网络上的数据。(2)inetaddress:面向的是ip层。用于标识网络上的硬件资源。(3)sockets和datagram:面向的则是传输层。sockets使用的是tcp协议,这是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道进行通信。datagram则使用udp协议,是另一种网络传输方式,它把数据的目的地记录在数据包中,然后直接放在网络上。 11.1.5 java网络编程网络编程java网络编程中主要使用的包中的类有:面向ip层的类:inetaddress面向应用层的类:url、urlconnectiontcp协议相关

10、类:socket、serversocketudp协议相关类:datagrampacket、datagramsocket、multicastsocket可能产生的异常:bindexception、connectexception、malformedurlexception、noroutetohostexception、protocolexception、socketexception、unknownhostexception、unknownserviceexception 无论你是在打电话、发送邮件或建立与internet的连接,地址是基础。inetaddress 类用来封装ip地址和该地址的域

11、名。inetaddress类可以用于标识网络上的硬件资源,它提供了一系列方法以描述、获取及使用网络资源。每个inetaddress对象包含了ip地址、主机名等信息。inetaddress类没有构造方法,因此不能用new来构造一个inetaddress实例。通常是用它提供的静态方法来获取:public static inetaddress getbyname(string host)host可以是一个机器名,也可以是一个形如“%d.%d.%d.%d”的四个十进制数的ip地址或一个dsn域名。public static inetaddress getlocalhost()public static

12、 inetaddress getallbyname(string host)这三个方法通常会产生unknownhostexception异常,应在程序中捕获处理。inetaddress 类也有一些非静态的方法,如本书表11-1所示。 11.2.1 创建创建url对象对象url类有以下几种方式创建url对象:1.url(string, string, int, string):构造一个url类,第一个string类型的参数是协议的类型,可以是http,ftp,file等。第二个string类型参数是主机名,int类型参数是指定端口号,最后一个参数是给出文件名或路径名。2.url(string,

13、string, string):构造一个url类,参数含义与上相同,使用缺省端口号。3.url(url, string):构造一个url类,使用给出的url和相对路径,string类型参数是相对路径。4.url(string):使用url字符串构造一个url类。当创建url时发生错误,系统会产生异常malformedurlexception,这是非运行时异常,必须在程序中捕获处理。 11.2.2 获取获取url对象的属性对象的属性一个url对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性:public string getprotocol():获取该url的协议名publ

14、ic string gethost() :获取该url的主机名public string getport() :获取该url的端口号public string getpath() :获取该url的文件路径public string getfile() :获取该url的文件名public string getref() :获取该url在文件中的相对位置public string getquery() :获取该url的查询名public string toexternalform():获取代表url的字符串 socket(插座)通信属于网络底层通信。socket最先应用于unix操作系统,如果了解

15、unix系统的输入/输出(i/o)的话,就很容易掌握socket,因为socket数据传输其实就是一种特殊的i/o。在传统的unix环境下可以操作tcp/ip协议的接口不止socket一个,socket所支持的协议种类也不光tcp/ip一种,因此两者之间是没有必然联系的。在java环境下,socket编程主要是指基于tcp/ip协议的网络编程。在java中可以将socket类和serversocket类分别用于client端和server端,在任意两台机器间建立连接。 11.4.1 socket与与serversocket类类网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的

16、一端称为一个socket。socket通常用来实现客户方和服务方的连接。socket是tcp/ip协议的一个十分流行的编程界面,一个socket由一个ip地址和一个端口号唯一确定。尽管socket编程是低层次网络编程但并不等于它功能不强大,恰恰相反,正因为层次低,socket编程比基于url的网络编程提供了更强大的功能和更灵活的控制,但是却要更复杂一些。java在包中提供了两个类:socket和serversocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。 11.4.2 socket通信通信socket通常用来实现c/s结构。使用socket进行clie

17、nt/server程序设计的一般连接过程是这样的:server端listen(监听)某个端口是否有连接请求,client端向server端发出connect(连接)请求,server端向client端发回accept(接受)消息,一个连接就建立起来了。server端和client端都可以通过send,write等方法与对方通信。进行socket通信,需要完成三个部分的工作:1.建立服务器类在服务器端,用java中的服务器类serversocket,使用端口号作为参数来创建服务器对象。例如:serversocket server = new serversocket(2000)这条语句创建了一个

18、服务器对象,这个服务器使用2000号端口。当一个客户端程序建立一个socket连接,所连接的端口号为2000时,服务器对象server便响应这个连接。 11.4.2 socket通信通信接下来用server.accept()方法创建一个socket对象。服务器端便可以利用这个socket对象与客户端进行通讯。例如:socket incoming = server.accept()紧接着用下面语句得到输入流和输出流,并进行封装:bufferedreader in =new bufferedreader(new inputstreamreader(incoming.getinputstream()

19、;printwriter out = new printwriter(incoming.getoutputstream(),true);随后,就可以使用in.readline()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。 11.4.2 socket通信通信每一个socket存在时,都将占用一定的资源,在socket对象使用完毕时,要其关闭。关闭socket可以调用socket的close()方法。在关闭socket之前,应将与socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺

20、序,与socket相关的所有的输入/输出该首先关闭,然后再关闭socket。例如:in.close();out.close();socket.close(); 11.4.2 socket通信通信2.建立客户端代码相比服务器端,客户端要简单一些,客户端只需用服务器所在机器的ip以及服务器的端口作为参数创建一个socket对象。得到这个对象后,就可以用前面介绍的方法实现数据的输入和输出。例如:socket socket = new socket(,2000);in = new bufferedreader(new inputstreamreader(socket.getinp

21、utstream();out = new printwriter(socket.getoutputstream(),true);以上的程序代码建立了一个socket对象,这个对象连接到ip地址为的主机上、端口为2000的服务器对象,并且建立了输入流和输出流,分别对应服务器的输出和客户端的写入。 11.4.2 socket通信通信3.建立用户界面大家可以利用前面讲解的知识,根据自己的喜好建立自己的用户界面。经过以上三个步骤,就可以建立一个比较简单的对话程序。但是,为了使这个程序更加完善,应将服务器端的程序变为多线程。这样可以使服务器为多个客户端服务。 数据报是一种无连接的通信方式,它的速度比较快,但是由于不建立连接,不能保证所有数据都能送到目的地,所以一般用于传送非关键性的数据。发送和接收数据报需要使用java类库中的datagrampacket类和datagramsocket类。下面分别介绍:1datagrampacket类它是进行数据报通信的基本单位,它包含了需要传送的数据、数据报的长度、ip地址和端口等。datagr

温馨提示

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

评论

0/150

提交评论