java核心技术.ppt_第1页
java核心技术.ppt_第2页
java核心技术.ppt_第3页
java核心技术.ppt_第4页
java核心技术.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JAVA核心技术,网络通讯,2,网络通讯,Java提供java.io包进行io操作 Java提供将对象序列化的方法将对象持久化或者通过网络传输,3,本章相关词汇,4,网络通讯,网络基础知识 IP地址与端口 包 InetAddress Socket ServerSocket UDP URL 扩展IO流的相关知识,5,网络通讯,包 InetAddress Socket ServerSocket,6,计算机网络与通信,通信是人类生活中最重要的需求之一; 通信是指:对语言、文字、声音和图片以及其它任何类型的相关数据进行传输; 计算机的出现以及网络的构成,使得数据通信更加快速有效。,7,网络原理,网络就

2、是一组连接在一起的计算机。,使用网卡、电缆、集线器等连接设备连接计算机以组成网络。,8,客户端/服务器模式,网络发展,促使客户端/服务器模式应运而生; 通过网络,向另一台计算机请求服务的计算机称为客户端,而处理请求的计算机称为服务器; 如数据服务器,需要数据的客户端机器向数据服务器提出请求,而服务器则处理客户端的请求并向其发送所需的数据; 客户端/服务器的优势在于: 服务器和客户端分摊任务,分别负责部分处理工作; 服务器可以同时为多台客户端服务; 多个客户端可以同时访问服务器上的相同数据。,9,IP地址,网络中有多台计算机,它们必须通过某种标识来区分每一台机器,这就是IP地址; IP地址由4个

3、字节共32位二进制数组成,类似于:; 在网络寻找某一台计算机都是依靠它的IP地址(用域名或计算机名定位主机其实也是通过某种服务转成IP地址后再找到该主机的); 网络ID:网络ID标识了计算机或网络设备所在的网段; 主机ID:主机ID标识了特定的主机或网络设备,10,特殊IP地址,许多网络地址被保留用于特殊用途; 和就是两个此类地址,第一个称为缺省路由,后一个是环回地址; 被保留用于用户主机的本地IP话务,它被分配给一个特殊接口,即起到闭合电路作用的环回接口。,11,端口,在一台物理性的计算机中,往往运行着多个网络程序,一个

4、IP地址并不足以完整标识一个服务器,因此,端口是机器内部独一无二的场所; 一台计算机上可能同时运行多个网络程序,IP地址只能确保把数据送到指定的计算机,但不能保证把这些数据传递给哪个网络程序; 端口使用一个16位的数字来表示,它的范围是065535,1024以下的端口号保留给预定义的服务,如:http使用80端口; 网络间通信其实是在网络应用程序端口之间进行的。,12,包,使用包可以实现Java的网络功能,其中包含了一系列与网络通讯相关的类,比较重要的有: InetAddress Socket ServerSocket 如果要进行网络通讯编程的话,必须导入此包。,13,.InetAddress

5、,InetAddress用来表示互联网协议(IP)地址,它的实例将IP地址和DNS(主机名解析)进行了封装; 该类无法直接实例化,只能通过下列静态工厂方法获得实例:,14,InetAddress示例,import .*; /导入包 public class InetAddressDemo public static void main(String args) try /获得当前本地主机的IP地址 InetAddress add1 = InetAddress.getLocalHost(); System.out.println(当前本地主机: + add1); /根据域名,通过DNS域名解析,

6、获得相应服务的主机地址 InetAddress add2 = InetAddress.getByName(); System.out.println(网易服务器主机: + add2); /根据字符串表现形式的IP地址获得相应的主机地址(若果网络上有该IP地址的话) InetAddress add3 = InetAddress.getByName(2); System.out.println(IP地址为2的主机: + add3); /根据机器名获得相应的主机地址(如果网络上有该机器名的话) InetAddress add4 = InetAddress.

7、getByName(J104); System.out.println(机器名为J104的主机: + add4); catch (UnknownHostException uhe) uhe.printStackTrace(); ,15,InetAddress的其它方法,16,套接字,网络上计算机通过TCP/IP协议进行通信,而套接字(socket)则将这些通信协议进行了封装; TCP/IP套接字用于在主机和Internet之间建立可靠的、双向的、持续的、点对点的流式连接; socket用于描述IP地址和端口,应用程序通过套接字向网络发出请求或者应答网络请求; 也就是说,套接字起到通信端点的作用

8、; 客户端和服务器通过套接字建立连接和通信。,17,套接字通信原理,TCP/IP协议,网 卡,网络管理软件,socket,socket,主机甲上的A程序将一段数据写入socket中,主机乙上的B程序从socket中读取这段数据,18,.Socket,Socket类用于创建套接字对象,其构造方法共有9种重载,常用的有如下几种: 套接字会因为网络的连接中断而失效,所以对它的操作都有可能抛出IOException,19,Socket的常用方法,一旦Socket对象被成功创建,就可以获得访问与之相关的输入/输出流的权力,通过流操作从套接字中发送(输出)和接收(输入)数据:,20,Socket的其它方法

9、,使用下面的方法,可以在任何时候检查套接字的地址和与之相关的端口信息:,21,.ServerSocket,ServerSocket类用来创建服务器套接字,它监听本地或远程客户程序通过公共端口的连接; ServerSocket类有4个重载的构造方法,以下是常用的: ServerSocket的常用方法如下:,22,Socket编程,编写服务器端程序: 创建一个服务器套接字(ServerSocket),绑定到指定端口; 调用accept方法,侦听来自客户端的请求,如果客户发出请求,则接受连接,返回通信套接字(Socket); 调用Socket的getInputStream和getOutputStre

10、am方法,获得输入/输出流,开始网络数据的接收和发送; 关闭通信套接字,关闭服务器套接字。,23,Socket编程,编写客户端程序: 创建一个套接字(Socket) ,向服务器的侦听端口发出请求; 与服务器正确连接后,调用Socket的getInputStream和getOutputStream方法,获得输入/输出流,开始网络数据的接收和发送; 关闭通信套接字。,24,Socket编程示意图,ServerSocket(int port),close(),close(),Socket(InetAddress address, int port),25,示例(服务端),public class S

11、erver private static final int SERVER_PORT = 9001; /指定侦听端口 public Server() try ServerSocket ss = new ServerSocket(SERVER_PORT); /创建服务器套接字 System.out.println(服务端已启动,正在等待客户端.); Socket s = ss.accept(); /侦听来自客户端的请求 InputStream in = s.getInputStream(); /获得输入流,用来接收数据 OutputStream out = s.getOutputStream()

12、; /获得输出流,用来发送数据 byte buf = new byte1024; int len = in.read(buf); /从输入流中读取数据 String strFromClient = new String(buf, 0, len); System.out.print(来自客户端的信息); System.out.println(strFromClient); String strToClient = 我也很好!; out.write(strToClient.getBytes(); /往输出流中发送数据 in.close(); out.close(); /关闭输入流和输出流 s.cl

13、ose(); ss.close(); /关闭通信套接字和服务器套接字 System.out.println(服务端已关闭。); catch (IOException ioe) ioe.printStackTrace(); public static void main(String args) new Server(); ,26,示例(客户端),public class Client private static final int SERVER_PORT = 9001; /服务器的侦听端口 public Client() try /由于服务端也是运行在本机,所以创建本机的InetAddres

14、s对象 InetAddress address = InetAddress.getByName(localhost); Socket s = new Socket(address, SERVER_PORT); /向服务器侦听端口发出请求 System.out.println(客户端已启动。); InputStream in = s.getInputStream(); /获得输入流,用来接收数据 OutputStream out = s.getOutputStream(); /获得输出流,用来发送数据 String strToServer = 你好!; out.write(strToServer

15、.getBytes(); /往输出流中发送数据 byte buf = new byte1024; int len = in.read(buf); /从输入流中读取数据 String strFromServer = new String(buf, 0, len); System.out.print(来自服务端的回答); System.out.println(strFromServer); in.close();out.close(); /关闭输入流和输出流 s.close(); /关闭通信套接字 System.out.println(客户端已关闭。); catch (UnknownHostExc

16、eption nhe) System.out.println(未找到指定主机.); catch (IOException ioe) ioe.printStackTrace(); public static void main(String args) new Client(); ,UDP,用数据报方式编写client/server程序时,无论在客户方还是服务方,首先都要建立一个DatagramSocket对象,用来接收或发送数据报,然后使用DatagramPacket类对象作为传输数据的载体,UDP,接收端程序编写: 调用DatagramSocket(int port)创建一个数据报套接字,并

17、绑定到指定端口上; 调用DatagramPacket(byte buf, int length),建立一个字节数组以接收UDP包 。 调用DatagramSocket类的receive(),接收UDP包。 最后关闭数据报套接字。,UDP,发送端程序编写: 调用DatagramSocket()创建一个数据报套接字; 调用DatagramPacket(byte buf, int offset, int length, InetAddress address, int port),建立要发送的UDP包 调用DatagramSocket类的send(),发送UDP包。 最后关闭数据报套接字。,TCP与

18、UDP的区别,UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。 与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。,TCP与UDP的区别,相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突法性的多个数据报。不同于TCP,UDP并不能确保数据的发

19、送和接收顺序。,URL,URL(Uniform Resource Locator)-统一资源定位器,表示Internet上某一资源的地址。 URL组成: 协议名和资源名 protocol:resourceName URL举例: ftp:/,URL类,常用构造方法 public URL(String spec); 例如:URL u1 = new URL(“ public URL(URL context, String spec); 例如: URL u2 = new URL(u1, “welcome.html”); public URL(String protocol, String host,

20、String file); 例如: URL u3 = new URL(“http”, “”, “developers/index.html” ); public URL (String protocol, String host, int port, String file); 例如: URL u4 = new URL(“http”, “”, 80, “developers/index.html” );,URL实例,public class URLConnectionReader public static void main(String args) throws Exception URL

21、 yahoo = new URL( URLConnection yc = yahoo.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( yc.getInputStream(); String inputLine; while (inputLine = in.readLine() != null) System.out.println(inputLine); in.close(); ,35,关于IO流,在两台主机之间通过socket建立握手连接之后,主要是通过输入/输出流来接收和发送数据,实际上,对于网络的操作,绝大部分是在操作IO流; 实际上操作网络端口流与操作磁盘文件流的原理是相似的; 出于效率的考虑,socket使用的是字节流,但是在实际操作中,字节往往会带来不便,所以我们一般会把字节流改造成字符流后进行操作。,36,改写示例(代码片段),public class Client /改用字符流的方式收发网络数据 Socket s = new Socket(address, SERVER_PORT); InputStream is = s.getInputStream(); InputStreamReader isr = new InputStre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论