第13章Java网络编程.ppt
《第13章Java网络编程.ppt》由会员分享,可在线阅读,更多相关《第13章Java网络编程.ppt(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1313章章 JavaJava网络编程网络编程 13.1 URL类编程 13.2 网络地址类InetAddress 13.3 Java套接字编程 13.4 数据报通信 第第1313章章 JavaJava网络编程网络编程lJava语言作为最流行的网络编程语言,提供了强大的网络编程功能。l使用Java语言可以编写底层的网络通信程序,这是通过包中提供的URL类、Socket类以及ServerSocket等类实现的。13.1 13.1 URLURL类编程类编程 l13.1.1 URL与URL类 l13.1.2 URLConnection类13.1.1 URL13.1.1 URL与与URLURL类类
2、 lURL是统一资源定位器(Uniform Resource Locator)的简写,它是WWW中网络资源定位的表示方法。lURL的基本格式为:l协议名表示资源使用的协议,如http、ftp、telnet、mailto或file等。l主机名为任何合法的主机域名,如。l端口号是可选的,如果使用熟知端口号,则可以省略。l资源名一般用来指定远程主机上文件系统中文件的完整路径,如/index.html。1.1.创建创建URLURL对象对象l在包中定义了URL类,使用URL类对象可以对WWW资源进行各种操作。1.创建URL对象lURL类常用的构造方法有:lpublic URL(String spec)使
3、用指定的字符串创建一个URL对象。lpublic URL(String protocol,String host,String file)使用指定的协议字符串、主机字符串和文件创建URL对象,使用默认的端口号。1.1.创建创建URLURL对象对象lpublic URL(String protocol,String host,int port,String file)使用指定的协议字符串、主机字符串、端口号和文件创建URL对象。lpublic URL(URL context,String spec)使用URL对象和相对地址创建URL对象。l注意,URL构造方法抛出MalformedURLExce
4、ption异常,当构造方法参数无效就会抛出该异常。因此,当创建URL对象时需要捕获并处理这个异常。2.URL2.URL类的常用方法类的常用方法lURL类提供的常用方法主要包括对URL对象的特征(如协议名、主机名、文件名、端口号和引用)的查询和对URL对象的读操作。lpublic String getProtocol()返回URL的协议名。lpublic String getHost()返回URL的主机名。lpublic int getPort()返回URL的端口号(若没有指定端口号返回值为-1)。lpublic String getFile()返回URL的文件名及路径。lpublic Stri
5、ng getRef()返回URL的在文件中的相对位置。2.URL2.URL类的常用方法类的常用方法lpublic String getPath()返回URL的路径。lpublic String getAuthority()返回URL的权限信息。lpublic String getUserInfo()返回URL的用户信息。lpublic InputStream openStream()在URL对象上打开一个连接,返回一个InputStream对象以便从这一连接中读取数据。lURLConnection openConnection()返回一个URLConnection类对象,该对象表示有URL指定
6、的远程对象的一个连接。程序程序13.1 ParseURL.java13.1 ParseURL.javaimport .*;import java.io.*;public class ParseURL public static void main(String args)throws Exception URL aURL=new URL(http:/:80/docs/books /tutorial+/index.html?name=networking#DOWNLOADING);System.out.println(protocol=+aURL.getProtocol();System.out
7、.println(authority=+aURL.getAuthority();System.out.println(host=+aURL.getHost();System.out.println(port=+aURL.getPort();System.out.println(path=+aURL.getPath();System.out.println(query=+aURL.getQuery();System.out.println(filename=+aURL.getFile();System.out.println(ref=+aURL.getRef();程序程序13.1 ParseUR
8、L.java13.1 ParseURL.javal在创建一个URL对象后,可以使用其openStream()方法建立一个连接并返回一个InputStream对象,然后就可以从这个对象上读取数据。l下面的例子说明了该方法的使用,它通过URL对象读取WWW信息。程序程序13.2 ReadURL.java13.2 ReadURL.javaimport .*;import java.io.*;public class ReadURL public static void main(String args)try URL url=new URL(http:/);BufferedReader in=new
9、 BufferedReader(new InputStreamReader(url.openStream()url.openStream();FileWriter out=new FileWriter(index.html);String inputLine;while(inputLine=in.readLine()!=null)out.write(inputLine);in.close();catch(MalformedURLException me)catch(IOException ioe)13.1.2 URLConnection13.1.2 URLConnection类类l通过URL的
10、openStream()方法,只能获得InputStream对象。使用该对象只能从网络上读取数据。l如果希望不仅要从URL读取内容,还要向URL对象发送服务请求及参数,可以使用URLConnection类。l利用URL类提供的openConnection()方法,可以建立一个URLConnection对象。可以调用其getInputStream()方法和getOutputStream()方法得到输入流和输出流对象。13.1.2 URLConnection13.1.2 URLConnection类类l这两个方法的格式分别为:lpublic InputStream getInputStream()
11、lpublic OutputStream getOutputStream()l通过使用在URLConnection对象上创建的InputStream对象可以从URL读取数据,通过OutputStream对象,可以向URL输出数据。l下面是一个简单的Servlet,它的功能是将客户请求的字符串反转,然后再发送给客户。该程序应该运行在Servlet容器(如Tomcat)中。程序程序13.3 ReverseServlet.java13.3 ReverseServlet.javaimport javax.servlet.*;import javax.servlet.http.*;import java
12、.io.*;import .*;public class ReverseServlet extends HttpServletprivate static String message=Servlet 处理错误;public void doPost(HttpServletRequest request,HttpServletResponse response)try int len=request.getContentLength();byte input=new bytelen;ServletInputStream sin=request.getInputStream();int c,cou
13、nt=0;while(c=sin.read(input,count,input.length-count)!=-1)count+=c;程序程序13.3 ReverseServlet.java13.3 ReverseServlet.java sin.close();String inString=new String(input);int index=inString.indexOf(=);if(index=-1)response.setStatus(HttpServletResponse.SC_BAD_REQUEST);response.getWriter().print(message);r
14、esponse.getWriter().close();return;String value=inString.substring(index+1);/将application/x-www-form-urlencoded字符串解码成UTF-8格式 String decodedString=URLDecoder.decode(value,UTF-8);/反转字符串 String reverseStr=(new StringBuffer(decodedString).reverse().toString();/设置响应状态码程序程序13.3 ReverseServlet.java13.3 Rev
15、erseServlet.java response.setStatus(HttpServletResponse.SC_OK);OutputStreamWriter writer=new OutputStreamWriter(response.getOutputStream();writer.write(reverseStr);writer.flush();writer.close();catch(IOException e)try resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);resp.getWriter().print(e.getMes
16、sage();resp.getWriter().close();catch(IOException ioe)13.1.2 URLConnection13.1.2 URLConnection类类l下面的程序Reverse.java向ReverseServlet发送请求,并传递一个字符串,ReverseServlet将字符串反转后发回给客户。程序程序13.4 Reverse.java13.4 Reverse.javaimport java.io.*;import .*;public class Reverse public static void main(String args)throws E
17、xception if(args.length!=2)System.err.println(Usage:java Reverse +http:/localhost:8080/helloapp/reverse+string_to_reverse);System.exit(1);/将UTF-8字符串编码成application/x-www-form-urlencoded MIME格式 String stringToReverse=URLEncoder.encode(args1,UTF-8);URL url=new URL(args0);URLConnection connection=url.op
18、enConnection();connection.setDoOutput(true);/设置连接对象作为输出对象使用程序程序13.4 Reverse.java13.4 Reverse.java OutputStreamWriter out=new OutputStreamWriter(connection.getOutputStream();/向服务器发送字符串 out.write(string=+stringToReverse);out.write(string=+stringToReverse);out.close();BufferedReader in=new BufferedRead
19、er(new InputStreamReader(connection.getInputStream()connection.getInputStream();/从服务器读取反转后的字符串 String decodedString;while(decodedString=in.readLine()!=null)System.out.println(decodedString);in.close();13.2 13.2 网络地址类网络地址类InetAddressInetAddressl要实现网络通信,首先需要知道计算机的地址。连接到Internet上的计算机使用IP地址或域名来唯一标识,在局域网
20、上的计算机则可以使用名称标识。在包中提供了InetAddress类来表示计算机地址。lInetAddress类没有提供构造方法,要得到一个InetAddress类对象,需要使用该类的静态方法。13.2 13.2 网络地址类网络地址类InetAddressInetAddresslpublic static InetAddress getByName(String host)返回给定主机名或点分十进制表示的主机的IP地址。lpublic static InetAddress getAllByName(String host)返回给定主机名或点分十进制表示的主机的所有IP地址数组。lpublic s
21、tatic InetAddress getLocalHost()返回本地主机的IP地址。l上述方法在指定的主机未知时将抛出UnknownHostException异常。13.2 13.2 网络地址类网络地址类InetAddressInetAddresslInetAddress类其他方法:lpublic String getHostName()返回该IP地址的主机名字符串。lpublic String getHostAddress()返回该IP地址的点分十进制字符串。lpublic byte getAddress()返回4个元素的表示IP地址的字节数组。程序程序13.5 GetIPAddress
22、.java13.5 GetIPAddress.javaimport .*;public class GetIPAddresspublic static void main(String args)throws Exception if(args.length!=1)System.out.println(Usage:GetIPAddress DomainName);System.exit(1);InetAddress address=InetAddress.getByName(args0);InetAddress address=InetAddress.getByName(args0);Syst
23、em.out.println(address);System.out.println(主机名:+address.getHostName();System.out.println(IP地址:+address.getHostAddress();程序程序13.5 GetIPAddress.java13.5 GetIPAddress.javal要运行该程序,机器必须连到网络上,并为其传递一个命令行参数,例如:D:studyjava GetIPAddress www.sun.javalwww.sun.java为命令行参数。程序的输出结果为:www.sun.java/60.19.29.21主机名:www.
24、sun.javaIP地址:60.19.29.2113.3 13.3 JavaJava套接字编程套接字编程 l13.3.1 套接字基本概念l13.3.2 套接字类 l13.3.3 Java小程序的网络通信 13.3.1 13.3.1 套接字基本概念套接字基本概念 l在网络上,很多应用都是采用客户/服务器(C/S)结构的。实现网络通信必须将两台机器连接起来建立一个双向通信链路,这个双向通信链路的每一端称为一个套接字(Socket)。1.1.端口号与套接字端口号与套接字 l在Internet上使用IP地址唯一标识一台主机。l一台主机可能提供多种服务,仅用IP地址不能唯一标识一个服务。通常使用一个整数
25、来标识该机器上的某个服务,这个整数就是端口号(Port)。l端口号是用16位整数标识,共有65536个端口号。端口号并不是机器上实际存在的物理位置,而是一种软件上的抽象。1.1.端口号与套接字端口号与套接字 l端口号分为两类。l一类是由因特网名字和号码指派公司ICANN分配给一些常用的应用层程序固定使用的熟知端口,其数值为01023。例如,HTTP服务的端口号为80,FTP服务的端口号为21。表13-1列出了几种常用的熟知端口号。表13-1 常用服务的端口号服 务FTPTelnetSMTPDNSHTTP SNMP端口号21232553801611.1.端口号与套接字端口号与套接字 l另一类端口
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 13 Java 网络 编程
限制150内