Java语言程序设计基础教程课件(第10章)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第10章Java网络编程10.1网络编程基础知识10.2URL及应用示例10.3InetAdress类10.4基于套接字的低层次Java网络编程10.5UDP数据报10.1网络编程基础知识网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。10.1.1网络基础知识目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。10.1.2网络基本概念IP地址:标识计算机等网络设备的网络地址,由四个8位的二进制数组成,中间以小数点分隔。如:166.111.136.3和166.111.52.80主机名(hostname):网络地址的助记名,按照域名进行分级管理。如:端口号(portnumber):网络通信时同一机器上的不同进程的标识。如80、21、23、25,其中1~1024为系统保留的端口号服务类型(service):网络的各种服务。http,telnet,ftp,smtp在Internet上IP地址和主机名是一一对应的,通过域名解析可以由主机名得到机器的IP,由于机器名更接近自然语言,容易记忆,所以使用比IP地址广泛,但是对机器而言只有IP地址才是有效的标识符。10.1.3传输协议:TCP、UDP尽管TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。TCP是TranferControlProtocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是serversocket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。UDP是UserDatagramProtocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。两种协议简单比较使用UDP时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。对于TCP协议,由于它是一个面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间。使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。总之,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。10.2URL及应用示例Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来。在编程处理上,一般先生成一个URL类型的对象,然后用Java中相应的方法(method)获取该对象所代表的资源。10.2.1统一资源定位器URLURL(UniformResourceLocator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。URL是最为直观的一种网络定位方法。使用URL符合人们的语言习惯,容易记忆,所以应用十分广泛。而且在目前使用最为广泛的TCP/IP中对于URL中主机名的解析也是协议的一个标准,即所谓的域名解析服务。使用URL进行网络编程,不需要对协议本身有太多的了解,功能也比较弱,相对而言是比较简单的,所以在这里我们先介绍在Java中如何使用URL进行网络编程来引导读者入门。10.2.2URL的组成URL的一般格式为(带方括号[]的为可选项):protocol://hostname[:port]/path/[;parameters][?query]#fragment协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gopher、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:=tom&age=20#resume格式说明1、protocol(协议):指定使用的传输协议,下表列出protocol属性的有效方案名称。最常用的是HTTP协议,它也是目前中应用最广的协议。file资源是本地计算机上的文件。格式file://ftp通过FTP访问资源。格式FTP://gopher通过Gopher协议访问该资源。http通过HTTP访问该资源。格式HTTP://https通过安全的HTTPS访问该资源。格式HTTPS://mailto资源为电子邮件地址,通过SMTP访问。格式mailto:MMS通过支持MMS(流媒体)协议的播放该资源。(代表软件:WindowsMediaPlayer)格式MMS://ed2k通过支持ed2k(专用下载链接)协议的P2P软件访问该资源。(代表软件:电驴)格式ed2k://Flashget通过支持Flashget:(专用下载链接)协议的P2P软件访问该资源。(代表软件:快车)格式Flashget://thunder通过支持thunder(专用下载链接)协议的P2P软件访问该资源。(代表软件:迅雷)格式thunder://news通过NNTP访问该资源。2、hostname(主机名):是指存放资源的服务器的域名系统(DNS)主机名或IP地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username@password)。3、:port(端口号):整数,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http的默认端口为80。如果输入时省略,则使用默认端口号。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项。4、path(路径):由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。5、;parameters(参数):这是用于指定特殊参数的可选项。6、?query(查询):可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。7、fragment,信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。10.2.3创建一个URL为了表示URL,java.net中实现了类URL。Java提供了四种创建URL对象的形式,通过下面的构造方法来初始化一个URL对象:1)publicURL(Stringspec);通过一个表示URL地址的字符串,构造一个URL对象。URLurlBase=newURL()2)publicURL(URLcontext,Stringspec);通过基准URL和文件名或路径相对URL,构造一个URL对象。URLnet263=newURL();URLindex263=newURL(net263,index.html)3)publicURL(Stringprotocol,Stringhost,Stringfile);通过协议,主机名,文件名或路径,构造一个URL对象。newURL(http,);4)publicURL(Stringprotocol,Stringhost,intport,Stringfile);通过协议,主机名,端口号,文件名或路径,构造一个URL对象。URLgamelan=newURL(http,Pages/Gamelan.network.html);注意:类URL的构造方法都声明抛弃非运行时例外(MalformedURLException),因此生成URL对象时,我们必须要对这一例外进行处理,通常是用try-catch语句进行捕获。格式如下:try{URLmyURL=newURL(…)}catch(MalformedURLExceptione){…//exceptionhandlercodehere…}10.2.4解析一个URL一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性:publicStringgetProtocol()获取该URL的协议名。publicStringgetHost()获取该URL的主机名。publicintgetPort()获取该URL的端口号,如果没有设置端口,返回-1。publicStringgetFile()获取该URL的文件名。publicStringgetRef()获取该URL在文件中的相对位置。publicStringgetQuery()获取该URL的查询信息。publicStringgetPath()获取该URL的路径publicStringgetAuthority()获取该URL的权限信息publicStringgetUserInfo()获得使用者的信息publicStringgetRef()获得该URL的锚【例10-1】生成一个URL对象,并获取它的各个属性。importjava.net.*;publicclassParseURL{publicstaticvoidmain(String[]args)throwsException{URLAurl=newURL();URLtuto=newURL(Aurl,tutorial.intro.html#DOWNLOADING);System.out.println(protocol=+tuto.getProtocol());System.out.println(host=+tuto.getHost());System.out.println(filename=+tuto.getFil

1 / 55
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功