• 1. 第8章 网络编程主讲:张振蕊
  • 2. 教学重点: 本章简要介绍Java语言网络编程的基本方法,重点介绍了Java语言基于三种通信模式的网络程序设计方法。计算机应用技术系教师专用 ( Java语言程序设计)
  • 3. 8.1 URL通信应用程序通过解析URL检索网络中资源,以便对获得的资源进行处理,进而完成网络通信的任务。 URL的概念 URL是统一资源定位符(Uniform Resource Locator)的简称,它表示Internet上某一资源的地址。 浏览器或其他程序通过解析给定的URL就可以在网络上查找相应的文件或其他资源。 每一个完整的URL由以下四部分组成: <传输协议>://<主机名>:<端口号>/<文件名> 计算机应用技术系教师专用 (Java语言程序设计)
  • 4. 8.1 URL通信URL的概念 一般的通信协议都已经规定了默认的通信瑞口。例如,HTTP协议的缺省瑞口号为80、FTP协议的缺省端口号为21等。 当使用某协议的缺省端口号时,可以省略缺省端口号不写。 两个程序之间只有在地址和端口方面都达成一致时,连接才能建立。 计算机应用技术系教师专用 (Java语言程序设计)
  • 5. 8.1 URL通信URL的概念 地址主要用来区分计算机网络中的各个计算机。 端口的定义可以理解为扩展的号码,使一个地址的计算机通过。不同的端口来与其他计算机进行通信。 在TCP协议中,端口号的范围从0到65535。 0到l023被预先定义的通信服务所占用。 应用程序使用1024到65535这些端口中的某一个来进行通信,以免发生端口的冲突。计算机应用技术系教师专用 (Java语言程序设计)
  • 6. 8.1 URL通信 URL类 要使用URL进行网络编程,必须创建URL对象,创建URL对象要使用java.net软件包中提供的URL类。 URL类的构造方法: public URL(String protocol,String host,int port,String file) public URL(String protocol,String host,String file) public URL(String protocol,String host,int port,String file,URLStreamHandler handler) public URL(String spec) public URL(URL context,String spec) public URL(URL context,String spec,URLStreamHandler handler) 计算机应用技术系教师专用 (Java语言程序设计)
  • 7. 8.1 URL通信 URL类 URL类构造方法的各个参数的含义 计算机应用技术系教师专用 (Java语言程序设计)参数含义protocol要使用的协议名称host主机名称port主机端口号file主机上的文件handlerURL 的流处理程序spec一个将作为 URL 解析的字符串context一个URL对象,作为spec的一种补充
  • 8. 8.1 URL通信 URL类 当创建URL对象时未指定任何协议,或者找到了未知协议。系统将会产生MalformedURLException异常,这是非运行时异常,必须在程序中捕获并处理。 创建URL对象的例子如下: URL url1=new URL("http","www.baidu.com",80,"index.html"); 一个URL对象生成后,其属性是不能被改变的,但可以通过URL类中给定的方法来获取这些属性。 URL类常用的方法如下表所示: 计算机应用技术系教师专用 (Java语言程序设计)
  • 9. 8.1 URL通信 计算机应用技术系教师专用 (Java语言程序设计)方法名摘要public String getProtocol()获取该URL的协议名public String getHost()获取该URL的主机名public String getPort()获取该URL的端口号public String getPath()获取该URL的文件路径public String getFile()获取该URL的文件名public String getRef()获取该URL在文件中的相对位置public String getQuery()获取该URL的查询名public final InputStream openStream()返回一个用于从该URL的 输入流public String toString()构造此 URL 的字符串表示形式。
  • 10. 8.1 URL通信 URL类 URL对象创建后,只是在应用程序中代表一个网络资源,而用户的主要目的是访问该资源的信息。 URL对象提供了一个openStream()方法,此方法调用成功将返回一个输入流类InputStream对象,该对象连接着一条和资源方的通信链路。 访问网络资源的过程就转变成了使用流对象的过程。 可以使用标准的InputStream类方法来从URL中读取资源数据。计算机应用技术系教师专用 (Java语言程序设计)
  • 11. 8.1 URL通信 使用URLConnection类访问网络资源 URL类的方法openStream(),只能从网络上读取资源中的数据。 使用java.net软件包的另一个URLConnection类,它可以在应用程序和URL资源之间进行交互,即可以从URL中读取数据,也可以向URL中发送数据。 URLConnection类表示了应用程序和URL资源之间的通信连接。计算机应用技术系教师专用 (Java语言程序设计)
  • 12. 8.1 URL通信 使用URLConnection类访问网络资源 创建URLConnection对象之前,必须先创建一个URL对象。 调用该URL对象的openConnection()方法就可以返回一个对应其URL地址的URLConnection对象。 URL fileURL=new URL("file:E:/test/zzr/Test.txt"); URLConnection con=fileURL.openConnection(); 计算机应用技术系教师专用 (Java语言程序设计)
  • 13. 8.1 URL通信 使用URLConnection类访问网络资源 向远程的计算机节点的读取或写入信息时,要建立输入或输出数据流。 可以使用URLConnection对象的getInputStream()和getOutputStream()方法,它们将返回该连接的数据流对象。 BufferedInputStream bis=new BufferedInputStream(con.getInputStream()); BufferedOutputStream bos=new BufferedOutputStream(con.getOutputStream()); 计算机应用技术系教师专用 (Java语言程序设计)
  • 14. 8.1 URL通信 使用URLConnection类访问网络资源 读取远程计算机节点的数据,可以使用bis.read()方法。 向远程计算机节点的写入数据时,可以调用bos.write()方法。 URLConnection类是一个抽象类,它是代表程序与URL对象之间建立通信连接的所有类的超类。 此类的一个实例可以用来读写URL对象所代表的资源。 出于安全性的考虑,Java程序只能对特定的URL进行写操作,这种URL就是服务器上的CGI程序。 CGI是公共网关接口的简称,它是客户端浏览器与服务器进行通信的接口。计算机应用技术系教师专用 (Java语言程序设计)
  • 15. 8.2 Socket通信 Socket套接字是应用于网络通信中的重要机制。主要分为流式套接字、数据报套接字。 流式套接字采用TCP协议,通过提供面向连接的服务,实现客户端/服务器之间双向、可靠的通信。 Java.net软件包中的Socket类和ServerSocket类为流式套接字通信方式提供了充分的支持。 计算机应用技术系教师专用 (Java语言程序设计)
  • 16. 8.2 Socket通信 Socket通信基础 Socket称为“套接字”,也有人称为“插座”,是指在两台汁算机上运行的两个程序之间的一个双向通信的链接点,而这个双向链路的每一端就称为一个Socket。 建立连接的两个程序分别称为客户端和服务器端。 客户端程序申请连接,而服务器端程序监听客户端程序的服务请求。 当客户程序请求和某个端口连接时,服务器程序就将“套接字”连接到该端口上。计算机应用技术系教师专用 (Java语言程序设计)
  • 17. 8.2 Socket通信 Socket通信基础 服务器与客户程序就建立了一个专用的虚拟连接。 客户端程序可以向套接字写入请求,服务器程序处理请求并把处理结果通过套接字送回。通信结束时,再将所建的虚拟连接拆除。 Socket是在两个程序间用来进行双向数据传输的网络通信端点,一般由一个地址加上端口号标识。 客户程序只能连接服务器的一个端口,而—个服务器可以有若干端口,不同的端口提供不同的服务。计算机应用技术系教师专用 (Java语言程序设计)
  • 18. 8.2 Socket通信 Socket通信基础 采用Socket通信方式的客户端/服务器应用程序的开发主要由以下几个步骤来完成。 初始化服务器,建立ServerSocket对象,等待客户端的连接请求; 初始化客户端,建立Socket对象,向服务器发出连接请求; 服务器响应客户端,建立连接; 客户端发送请求数据到服务器方; 服务器接收客户端请求数据; 服务器处理请求数据,并返回处理结果给客户端; 客户端接收服务器返回的结果; 重复④至⑦步,直到客户端结束对话为止; 中断连接,结束通信。计算机应用技术系教师专用 (Java语言程序设计)
  • 19. 8.2 Socket通信 Socket通信程序的开发 对于Socket通信,通过Socket类和ServerSocket类,可以分别用于在客户端和服务器上创建和管理通信。 客户端程序的编写 调用Socket类的构造函数,以服务器主机地址信息和端口号为参数,创建一个Socket对象。 Socket类提供了方法getInputStream()和getOutputStream()来得到对应的输入/输出流。 使用流对象的方法读写字节流数据。 通信完毕,关闭所有的与Socket相关的输入/输出流,使用Socket 对象的close()方法关闭Socket通信。计算机应用技术系教师专用 (Java语言程序设计)
  • 20. 8.2 Socket通信 Socket通信程序的开发 服务器程序的编写 创建ServerSocket类的对象,代表服务器监听客户端请求的Socket。 使用ServerSocket对象的accept()方法来接收来自客户端程序的连接请求。 通过新的Socket对象创建输入/输出流对象。 客户端工作完毕,服务器方关闭与该客户端通信的流及Socket。 服务器工作完毕,调用ServerSocket对象的close()方法关闭Socket监听。计算机应用技术系教师专用 (Java语言程序设计)
  • 21. 8.3 UDP通信 UDP通信基础 数据报套接字通信方式采用UDP(User Datagram Protocol,用户数据报协议)协议,其是无连接的,每个数据报都是一个独立的信息单元,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地。 使用UDP传输的数据是有大小限制的,所传输的每个数据报必须限定在64KB之内 在java.net包中提供了DatagramSocket类和DatagramPacket类,用来支持数据报通信。 计算机应用技术系教师专用 (Java语言程序设计)
  • 22. 8.3 UDP通信 UDP通信程序的开发 开发客户端应用程序的过程 调用调用DatagramSocket类的构造函数,创建数据报通信的Socket对象。 构造应用程序的载体——数据报。每个数据报是以一个DatagramPacket对象的形式出现的。 发送数据报。通过调用DatagramSocket对象的send()方法,并以DatagramPacket对象为参数,将DatagramPacket对象中信息数据组成数据报送入网络。 接收数据报。为了接收从服务器返回结果的数据报,需要再次创建一个DatagramPacket对象,由于要接收的数据报的信息只有在数据报被收到时才能确定。 处理接收到的数据,通信过程完毕。调用DatagramSocket对象的close()方法关闭数据报通信socket。计算机应用技术系教师专用 (Java语言程序设计)
  • 23. 8.3 UDP通信 UDP通信程序的开发 开发服务器应用程序的过程 不同于TCP通信方式,在UDP通信中,通信双方并不需要建立连接。 服务器应用程序的通信过程与客户端应用程序的通信过程十分相似,也要建立数据报通信DatagramSocket对象及DatagramPacket,接受数据报和发送数据报,以及处理接受到的数据。 通信完毕后,关闭数据报Socket。计算机应用技术系教师专用 (Java语言程序设计)
  • 24. 8.3 UDP通信 UDP通信程序的开发 DatagramSocket类的构造函数有以下几种形式: public DatagramSocket() protected DatagramSocket(DatagramSocketImpl impl) public DatagramSocket(int port) public DatagramSocket(int port,InetAddress laddr) public DatagramSocket(SocketAddress bindaddr) 计算机应用技术系教师专用 (Java语言程序设计)
  • 25. 8.3 UDP通信 UDP通信程序的开发 DatagramPacket对象的构造形式如下所示: public DatagramPacket(byte[] buf,int length,InetAddress address, int port) public DatagramPacket(byte[] buf,int offset,int length,InetAddress address, int port) public DatagramPacket(byte[] buf, int length, SocketAddress address) public DatagramPacket(byte[] buf,int offset,int length,SocketAddress address) 计算机应用技术系教师专用 (Java语言程序设计)
  • 26. 谢谢大家!