Java中的网络编程.ppt
《Java中的网络编程.ppt》由会员分享,可在线阅读,更多相关《Java中的网络编程.ppt(32页珍藏版)》请在三一办公上搜索。
1、2023/11/7,1,第11章 Java 中的网络编程,本章导读 URL类 读取URL中的资源 显示URL资源中的HTML文件 处理超链接 InetAddress类 套接字Socket 使用多线程处理套接字连接 UDP数据报 广播数据 Java远程调用,2023/11/7,2,概述,本章重点介绍4个重要的类URL、Socket、InetAddress和DatagramSocket。网络的一些基本知识:IP(Internet Protocol)地址:IP地址是用于惟一标识连接到Internet的计算机的数字地址是由32位二进制数组成,如。没有IP地址就不能区分连在Internet上不同的计算机
2、。域名:用字符形式表示连接到Internet的计算机的数字地址。如域名“”和IP“”是一个主机的两种表示法。域名服务器(DNS):负责将域名与IP地址的转化。URL(Uniform Resource Locator,统一资源定位符):标识了计算机上的资源。一个URL通常包含一些重要的信息,如包含了如下信息:http 服务使用的协议(HTTP)。存储资源的计算机的域名地址。hotlink.html 资源。客户服务器体系结构:客户需要某些类型的信息,而服务器提供客户所需要的信息。客户需要连接到服务器上,并向服务器请求信息,服务器则向客户发送信息,两者按照协议协同工作,各得其所。,2023/11/7
3、,3,11.1 URL类,包中的 URL类是对URL的抽象,使用URL创建对象的应用程序称为客户端程序,一个URL对象存放着一个具体的资源的引用,表明客户要访问这个URL中的资源,利用URL对象可以获取URL中的资源。一个URL对象通常包含最基本的三部分信息协议、地址、资源。URL的构造方法 public URL(String spec)throws MalformedURLException 使用字符串初始化一个URL对象,如 try url=new URL(http:/);catch(MalformedURLException e)System.out.println(Bad URL:+u
4、rl);该URL对象使用的协议是HTTP,即用户按照这种协议与指定的服务器通信,该URL对象包含的地址是“”,所包含的资源是默认的资源(主页)。public URL(String protocol,String host,String file)throws MalformedURLException 构造的URL对象的协议、地址和资源分别由参数protocol、host和file指定。,2023/11/7,4,11.2 读取URL中的资源,URL对象调用InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源
5、信息读入到客户端。,例11-1(效果如图11.1所示)在一个文本框中输入网址,然后单击“确定”按钮读取服务器上的资源。由于网络速度或其他因素,URL资源的读取可能会引起堵塞,因此程序需在一个线程中读取URL资源,以免堵塞主线程。,2023/11/7,5,11.3 显示URL资源中的HTML文件,在上面的例11-1中的主页的内容显示在文本区中,但有时候我们想看到网页的运行效果。javax.swing包中的JEditorPane类可以解释执行html文件。也就是说,如果把html文件读入到JEditorPane,该html文件就会被解释执行,显示在JEditorPane中,这样程序就看到了网页的运
6、行效果。JEditorPane类的构造方法 public JEditorPane()public JEditorPane(URL initialPage)throws IOException public JEditorPane(String url)throws IOException 后两个构造方法使用参数initialPage或url指定该对象最初显示的URL中的资源。JEditorPane对象调用public void setPage(URL page)throws IOException方法可以显示新的URL中的资源。例11-2用JEditorPane对象显示网页,效果如图11.2所
7、示。,2023/11/7,6,例11-2 运行效果图11.2,图11.2 显示网页,2023/11/7,7,11.4 处理超链接,当JEditorPane对象调用setEditable()方法将编辑属性设为false时,不仅可以显示网页的运行效果,而且用户如果单击网页中超链接,还可以使得JEditorPane对象触发HyperlinkEvent事件。程序可以通过处理HyperlinkEvent事件,来显示新的URL资源。JEditorPane对象调用addHyperlinkListener(HyperlinkListener listener)获得监视器。监视器需实现HyperlinkList
8、ener接口,该接口中的方法是:void hyperlinkUpdate(HyperlinkEvent e)例11-3中,当单击超链接时,JEditorPane对象将显示超链接所链接的网页。,2023/11/7,8,11.5 InetAddress类,包中的InetAddress类对象含有一个Internet主机地址的域名和IP地址:。域名容易记忆,在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化成IP地址,这样我们才能和主机建立连接。1获取Internet上主机的地址 可以使用InetAddress类的静态方法getByName(String s);将一个域名或IP地址传
9、递给该方法的参数s,获得一个InetAddress对象。该对象含有主机地址的域名和IP地址,该对象用如下格式表示它包含的信息:例11-4分别获取域名是的主机域名和IP地址,同时获取IP地址是的主机域名。注:运行上述程序时应保证已经连接到Internet上。上述程序的运行结果如下:另外,InetAddress类中含有两个实例方法:public String getHostName()获取InetAddress对象所含的域名。public String getHostAddress()获取InetAddress对象所含的IP地址。2获取本地机的地址 可以使用InetAddress类的静态方法get
10、LocalHost();获得一个InetAddress对象,该对象含有本地机的域名和IP地址。,2023/11/7,9,11.6 套接字Socket,IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号与IP地址的组合得出一个网络套接字。端口号被规定为一个16位的整数065535。其中,01023被预先定义的服务通信占用,应该使用102465535这些端口中的某一个进行通信,以免发生端口冲突。当两个程序需要通信时,它们可以通过使用Socket类建立套接字对象并连接在一起。比如,有人让你去“中山广场邮局”,你可能反问“我去做什么”,因为他没有告知你“端口”,你
11、不知处理何种业务。他说:“中山广场邮局,8号窗口”,那么你到达地址“中山广场邮局”,找到“8号”窗口,就知道 8号窗口处理特快专递业务,而且必须有个先决条件,就是你到达“中山广场邮局,8号窗口”时,该窗口必须有一位业务员在等待客户,否则就无法建立通信业务。套接字连接,就是客户端的套接字对象和服务器端的套接字对象通过输入输出流连接在一起,现在我们分3个步骤来说明套接字连接的基本模式。,2023/11/7,10,11.6 套接字连接_(1)服务器建立ServerSocket对象,ServerSocket对象负责等待客户端请求建立套接字连接。服务器必须事先建立一个等待客户请求建立套接字连接的Serv
12、erSocket对象。ServerSocket的构造方法是ServerSocket(int port);port是一个端口号,必须和客户请求的端口号相同。当建立服务器套接字时可能发生IOException异常,因此要像下面那样建立接收客户的服务器套接字。try ServerSocket waitSocketConnection=new ServerSocket(1880);catch(IOException e),2023/11/7,11,续 11.6 套接字连接_(1)服务器建立ServerSocket对象,当服务器的ServerSocket对象waitSocketConnection建立后
13、,就可以使用方法accept()接受客户的套接字连接请求,如下所示:waitSocketConnection.accept();接收客户的套接字也可能发生IOException异常,因此要像下面那样建立接收客户的套接字。try Socket socketAtServer=waitSocketConnection.accept();catch(IOException e)所谓接收客户的套接字请求,就是accept()方法会返回一个Socket对象socketAtServer(服务器端的套接字对象)。但是,accept()方法不会立刻返回,该方法会堵塞服务器端当前线程的执行,直到有客户端请求建立套
14、接字连接。就是说,如果没有客户请求建立套接字连接,那么下述代码中的System.out.println(ok);总不会被执行:try Socket socketAtServer=waitSocketConnection.accept();System.out.println(ok)catch(IOException e)注:ServerSocket对象可以调用setSoTimeout(int timeout)方法设置超时值(单位是毫秒),timeout是一个正值。当ServerSocket对象调用accept()方法堵塞的时间一旦超过timeout时,将触发SocketTimeoutExcep
15、tion。,2023/11/7,12,11.6 套接字连接_(2)客户端创建Socke对象,客户端程序可以使用Socket类创建对象 Socket的构造方法如下:Socket(String host,int port)参数host是服务器的IP地址,port是一个端口号。创建Socket对象可能发生IOException异常,因此要像下面那样建立到服务器的套接字连接。try Socket socketAtClient=new Socket(http:/192.168.0.78,1880);catch(IOException e)客户端建立socketAtClient对象的过程就是向服务器发出套
16、接字连接请求,如果服务器端相应的端口上有ServerSocket对象正在使用accept()方法等待客户,那么双方的套接字对象socketAtClient和socketAtServer就都诞生了。也可以使用Socket类不带参数的构造方法public Socket()创建一个套接字对象,该对象不请求任何连接。该对象再调用 public void connect(SocketAddress endpoint)throws IOException请求与参数SocketAddress指定地址的套接字建立连接。为了使用connect()方法,可以使用SocketAddress的子类InetSocket
17、Address创建一个对象,InetSocketAddress的构造方法如下:public InetSocketAddress(InetAddress addr,int port),2023/11/7,13,11.6 套接字连接_(3)流连接,客户端和服务器端的套接字对象诞生以后,还必须进行输入输出流的连接。服务器端的这个Socket对象socketAtServer使用方法getOutputStream()获得的输出流将指向客户端Socket对象socketAtClient使用方法getInputStream()获得的那个输入流。同样,服务器端的这个Socket对象socketAtServer
18、使用方法getInputStream()获得的输入流将指向客户端Socket对象socketAtClient使用方法getOutputStream()获得的那个输出流。因此,当服务器向这个输出流写入信息时,客户端通过相应的输入流就能读取,反之亦然,如图11.3套接字连接示意图所示。连接建立后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddess对象,该对象含有客户端的IP地址和域名。同样,客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddess对象,该对象含有服务器端的IP地址和域名。套接字调用close()方法可以关闭
19、双方的套接字连接,只要一方关闭连接,就会导致对方发生IOException异常。例11-5中,客户端向服务器发出ASCII表的顺序值1127,服务器接收这些数据,并将顺序值对应的字符返回给客户。效果如图11.4,11.5所示。,2023/11/7,14,图11.3 套接字连接示意图,2023/11/7,15,例11-5中运行效果图11.4,11.5,2023/11/7,16,11.7 使用多线程处理套接字连接,套接字连接中涉及到输入流和输出流操作,客户端或服务器读取数据可能会引起堵塞,我们应把读取数据放在一个单独的线程中去进行。另外,服务器收到一个客户的套接字后,就应该启动一个专门为该客户服务
20、的线程。例11-6中,客户输入一个一元二次方程的系数并发送给服务器,服务器把计算出的方程的实根返回给客户。因此,用户可以将计算量大的工作放在服务器端,客户端负责计算量小的工作,实现客户服务器交互计算,来完成某项任务。效果如图11.6,11.7所示。首先将例11-6中服务器端的程序编译通过,并运行起来,等待客户的呼叫。,2023/11/7,17,例11-6中运行效果图11.6,11.7,2023/11/7,18,11.8 UDP数据报_概述,前面学习了基于TCP协议的网络套接字(Socket),套接字属于有连接的通信方式,非常像生活中的电话通信,一方呼叫,另一方负责监听,一旦建立了连接,双方就可
21、以进行通信了。本节将介绍Java中基于UDP(用户数据报协议)的网络信息传输方式。基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证。也就是说,数据在传输时,用户无法知道数据能否正确到达目的地主机,也不能确定数据到达目的地的顺序是否和发送的顺序相同。既然UDP是一种不可靠的协议,为什么还要使用它呢?如果要求数据必须绝对准确地到达目的地,显然不能选择UDP协议来通信。但有时候人们需要较快速地传输信息,并能容忍小的错误,就可以考虑使用UDP协议。基于UDP通信的基本模式是如下:将数据打包,称为数据报,然后将数据报发往目的地;接受别人发来的数据报,然后查看数据报中的
22、内容。,2023/11/7,19,11.8 UDP数据报_1发送数据,1)创建DatagramPacket对象 用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据报。用DatagramPacket的类以下两个构造方法创建待发送的数据报:DatagramPacket(byte data,int length,InetAddtress address,int port)DatagramPacket(byte data,int offset,int length,InetAddtress address,int port)使用构造方法创建的数据报对象
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 中的 网络 编程
链接地址:https://www.31ppt.com/p-6509635.html