您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 网络程序设计(java)第10章 网络通信
2020/4/141网络程序设计NetworkProgramming第十章网络通信赵建立山东科技大学信息科学与工程学院CollegeofInformationScienceandEngineering,ShandongUniversityofScienceandTechnologyzhaojianli@gmail.com主要内容•10.1网络通信简介•10.2URL通信•10.3Socket通信•10.4远程方法调用(RMI)10.1网络通信简介•网络通信的核心是协议。协议是指进程之间交换信息已完成任务所使用的一系列规则和规范。它主要包含两个方面的定义:•1定义了进程之间交换消息所必需遵循的顺序。•2定义进程之间所交换的消息的格式。•通过定义协议,可以看出,两个进程只要遵循相同的协议,就可以相互交换信息,而这两个进程可以用不同的编程语言编写,可以位于两个完全不同的计算机上。国际标准化组织给出了一个通用的参考协议,称为开放式系统互连参考模型(ISO/OSIRM)。图14-1ISO/OSIRM分层图应用层表示层会话层传输层网络层数据链路层物理层应用层表示层会话层传输层网络层数据链路层物理层主要内容•10.1网络通信简介•10.2URL通信•10.3Socket通信•10.4远程方法调用(RMI)10.2URL通信•10.2.1URL简介•10.2.2URL类•10.2.3通过字节流访问资源•10.2.4通过URLConnection实现双向通信•10.2.5使用HttpURLConnection10.2.1URL简介•URL用来网络资源定位,它的值由5部分组成,格式如下所示•传输协议://主机名:端口号/文件名#引用•其中传输协议(protocol)指明获取资源所使用的传输协议,如http、ftp、mms等。主机名(hostname)指定资源所在的计算机,可以是IP地址,如127.0.0.1,也可以是主机名或域名,如。一个计算机中可能有多种服务(应用程序),端口号(port)用来区分不同的网络服务,如http服务的默认端口号是80,ftp服务的默认端口号是21等。文件名(filename)包括该文件的完整路径。在http协议中,缺省的文件名是index.html,因此,•。引用(reference)为资源内的某个引用,用来定位显示文件内容的位置,如。但并非所有的URL都包含这些元素。对于多数的协议,主机名和文件名是必需的,但端口号和文件内部的引用则是可选的。10.2URL通信•10.2.1URL简介•10.2.2URL类•10.2.3通过字节流访问资源•10.2.4通过URLConnection实现双向通信•10.2.5使用HttpURLConnection10.2.2URL类•1)URL(Stringspec),spec为一个完整的URL地址•2)URL(Stringprotocol,Stringhost,intport,Stringfile)•将一个URL地址分解,按不同部分分别指定协议、主机、端口、文件。例如:•URLu=newURL(“http”,”java.sun.com”,80,“docs/books/tutorial.intro.html”);•3)URL(URLcontext,Stringspec)•这种方法基于一个已有的URL对象创建一个新的URL对象,多用于访问同一个主机上不同路径的文件,例如:•URLu=newURL(“”);•URLu1=newURL(u,”tutorial.intro.html”);•URLu2=newURL(u,”tutorial.super.html”);【例10-1】URL的使用importjava.io.*;importjava.net.*;publicclassURL1{publicstaticvoidmain(String[]args)throwsIOException{URLurl=newURL();System.out.println(Authority=+url.getAuthority());System.out.println(Defaultport=+url.getDefaultPort());System.out.println(File=+url.getFile());System.out.println(Host=+url.getHost());System.out.println(Path=+url.getPath());System.out.println(Port=+url.getPort());System.out.println(Protocol=+url.getProtocol());System.out.println(Query=+url.getQuery());System.out.println(Ref=+url.getRef());System.out.println(UserInfo=+url.getUserInfo());}10-1运行结果10.2URL通信•10.2.1URL简介•10.2.2URL类•10.2.3通过字节流访问资源•10.2.4通过URLConnection实现双向通信•10.2.5使用HttpURLConnection10.2.3通过字节流访问资源•URL对象创建后,就可以通过它来访问指定的资源。这时需要调用URL类的openStream()方法,该方法与指定的URL建立连接并返回一个InputStream类的对象,这样访问网络资源的操作就变成了我们熟悉的I/O操作,接下来就可以用字节流的方式读取资源数据。【例10-2】通过URL对象访问资源importjava.io.*;importjava.net.*;publicclassURL2{publicstaticvoidmain(String[]args)throwsIOException{URLurl=newURL(“”);InputStreamReaderisr=newInputStreamReader(url.openStream());BufferedReaderbr=newBufferedReader(isr);Strings;while((s=br.readLine())!=null)System.out.print(s);br.close();}}10.2URL通信•10.2.1URL简介•10.2.2URL类•10.2.3通过字节流访问资源•10.2.4通过URLConnection实现双向通信•10.2.5使用HttpURLConnection10.2.4通过URLConnection实现双向通信•实际应用中,只能读取数据是不够的,很多情况下,我们都需要将一些信息发送到服务器中去,这就要求我们能够实现同网络资源的双向通信,URLConnection类就是用来解决这一问题的。•类URLConnection也是定义在包java.net里,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的URLConnection对象。URLConnection是以HTTP协议为中心的类,其中很多方法只有在处理HTTP的URL时才起作用。•1.建立连接•URLurl=newURL(“”);•URLConnectioncon=url.openConnection();•2.向服务器端送数据•PrintStreamps=newPrintStream(con.getOutputStream());•ps.println(string_data);•3.从服务器读数据•DataInputStreamdis=newDataInputStream(con.getInputStream());•dis.readLine();【例10-3】URLConnection的使用importjava.io.*;importjava.net.*;publicclassComWithCgi{publicstaticvoidmain(String[]args)throwsException{//建立指向本地磁盘上cgi的URL对象URLurl=newURL(“http:/java.sun.com/test.cgi”);URLConnectionconnection=url.openConnection();connection.setDoOutput(true);PrintStreamps=newPrintStream(connection.getOutputStream());ps.println(0123456789);ps.close();//向服务器输出数据DataInputStreamdis=newDataInputStream(connection.getInputStream());StringinputLine;while((inputLine=dis.readLine())!=null){System.out.println(inputLine);}dis.close();//从服务器读数据}}10.2URL通信•10.2.1URL简介•10.2.2URL类•10.2.3通过字节流访问资源•10.2.4通过URLConnection实现双向通信•10.2.5使用HttpURLConnection10.2.5使用HttpURLConnection•HttpURLConnection是URLConnection的子类。HttpURLConnection提供了对Http协议的支持,如果所访问的URL地址是一个Http地址,那么就可以使用HttpURLConnection。例如:URLurl=newURL();HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();•但是要注意如果URL地址不是一个http地址,那么就无法用类型转换获取HttpURLConnection的实例。•由于HttpURLConnection是URLConnection的子类,因此HttpURLConnection具有URLConnection的全部public方法,HttpURLConnection的基本用法也与URLConnection相同。HttpURLConnection独特的方法•publicvoiddisconnect(),断开与服务端的连接。•publicInputStreamgetErrorStream(),返回错误流(ErrorStream),所谓错误流是指连接失败时服务端返回的有用数据,这些有用数据通常通过错误流返回。例如服务器端返回404错误时(表示所访问的文件无法找到)。•publicStringgetRequestMethod(),返回请求的类型,请求类型包括Get、POST、HEAD、OPTIONS、PUT、DELETE、TRACE。•publicintgetResponseCode(),返回服务器端响应的状态字,例如200表示OK,401表示Unauthorized。•publicStringgetRe
本文标题:网络程序设计(java)第10章 网络通信
链接地址:https://www.777doc.com/doc-4797655 .html