第 9 章 java网络
1837109783
贡献于2015-10-16
2245
1
0
第 9 章 java网络
下载需要
3
金币
[ 金币充值 ]
服务器/托管费、人工审核、技术维护等都需要很多费用,请您支持深度开源的发展
下载PPT
标签:
Java开发
方案
HTML
Java
Protocol
PPT 内容
1. 1第9章 网络通信
2. 2主要内容9.1 网络编程的基础知识 9.2 基于TCP协议网络程序设计 9.3 基于UDP协议网络程序设计 9.4 JApplet编程 9.5 基于分布模式的云计算系统
3. 39.1 网络编程的基础知识9.1.1 IP地址和端口号 9.1.2 套接字
4. 49.1.1 IP地址和端口号1、IP地址 网络中的每台计算机都必须有一个惟一的IP地址作为标识,这个数通常写作一组由”.”号分隔的十进制数。
5. 59.1.1 IP地址和端口号在Java.net包中,IP地址由一个称作InetAddress的特殊的类来描述。这个类提供了三个用来获得一个InetAddress类的实例的静态方法。这三个方法是: getLocalHost( )返回一个本地主机的IP地址。 getByName(String host )返回对应于指定主机的IP地址。 getAllByName(String host )对于某个主机有多个IP地址(多宿主机,从本质上讲,多宿主主机是1台具有多个网络(互联网)连接的主机)可用于得到一个IP地址数组。 此外,对一个InetAddress的实例可以使用: getAddress( )获得一个用字节数组形式表示的IP地址。 getHostName( )作反向查询,获得对应于某个IP地址的主机名。
6. 6【例9-1】通过域名查找IP地址。/* IP地址 */ import java.net.*; import javax.swing.*; public class Example9_1 { public static void main(String []args) { String str; try{ InetAddress zsm = InetAddress.getByName("www.zsm8.com"); str="思维论坛的IP地址为:"+zsm.toString(); } catch(UnknownHostException e) { str="无法找到思维论坛"; } JOptionPane.showMessageDialog(null,str); System.exit(0); //退出程序 } }
7. 7【例9-2】查找本机IP地址。 /* 查找本机IP地址 */ import java.net.*; import javax.swing.*; public class Example9_2 { public static void main(String []args) { String str; try{ InetAddress host_address=InetAddress.getLocalHost(); str="本机的IP地址为:"+host_address.toString(); } catch(UnknownHostException e) { str="本机没有安装网卡,无法找到IP。"; } JOptionPane.showMessageDialog(null,str); System.exit(0); //退出程序 } }
8. 89.1.1 IP地址和端口号2、端口 我们用“端口号”来标识正在计算机上运行的进程(程序)。每个被发送的网络数据包也都包含有“端口号”,用于将该数据帧交给具有相同端口号的应用程序来处理。
9. 99.1.1 IP地址和端口号2、端口 端口号是一个整数,其取值范围为0~65535之间。由于同一台计算机上不能同时运行两个有相同端口号的进程。通常0~1023间的端口号作为保留端口号,用于一些网络系统服务和应用,用户的普通网络应用程序应该使用1024以后的端口号,从而避免端口号冲突。
10. 109.1.1 IP地址和端口号3、TCP与UDP协议 在网络中,有两个常用的协议,它们是“传输控制协议”(Transmission Control Protocol,简称TCP)和“用户数据报协议”(User Datagram Protocol,简称:UDP)。
11. TCP(Transmission Control Protocol,传输控制协议)TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。 我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包: “我想给你发数据,可以吗?”,这是第一次对话; 主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话; 主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。 三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。11
12. UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。 它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。 比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。12
13. 139.1.2 套接字1、什么是套接字 在TCP/IP通信协议中,套接字(Socket)就是IP地址与端口号的组合。 如图所示,IP地址193.14.26.7与端口号13组成一个套接字。
14. 149.1.2 套接字网络通信,准确地说,不能仅说成是两台计算机之间在通信,而是两台计算机上执行的网络应用程序(进程)之间在收发数据。 当两个网络程序需要通信时,它们可以通过使用Socket类建立套接字连接。我们把呼叫方称为“客户端”,负责监听的一方称为“服务器端”。
15. 159.1.2 套接字2、客户端建立套接字Socket对象 在客户端使用socket类,建立向指定服务器IP和端口号连接的套接字,其构造方法是: Socket(host_IP, prot); 其中host_IP是服务器的IP地址,prot是一个端口号。 Socket主要方法有: getInputStream( ):获得一个输入流,读取从网络线路上传送来的数据信息。 getOutputStream( ):获得一个输出流,用这个输出流将数据信息写入到网络“线路”上。
16. 169.1.2 套接字3、服务器端建立套接字Socket对象 在服务器端用ServerSocket类创建服务器Socket,ServerSocket类的构造方法为: ServerSocket(int port); 创建ServerSocket实例是不需要指定IP地址的,ServerSocket总是处于监听本机端口的状态。 ServerSocket类的主要方法: Socket accept(); 该方法用于在服务器端的指定端口监听客户机发起的连接请求,并与之连接,其返回值为Socket对象。
17. 179.2 基于TCP协议网络程序设计9.2.1客户机/服务器模式 9.2.2同时服务于多个客户的解决方案
18. 189.2.1客户机/服务器模式 利用Socket方式进行数据通信与传输,大致有如下步骤: (1)创建服务器端ServerSocket,设置建立连接的端口号。 (2)服务器端、客户端各自创建Socket对象,服务器端建立连接,客户端设置绑定的主机名称或IP地址,指定连接端口号。 (3)客户机Socket发起连接请求。 (4)建立连接。 (5)取得InputStream和OutputStream。 (6)利用InputStream和OutputStream进行数据传输。 (7)关闭Socket和ServerSocket。
19. 19
20. 1.实现server和client模型程序实现原理: ====================================================== 服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口), 等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 =========================================================== 客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后, 关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。 20
21. 服务器端代码:import java.io.*; import java.net.Socket; import java.net.ServerSocket; public class Server{ public static void main(String args[]) { try { ServerSocket s = new ServerSocket(8888); // 指定服务器端的端口号为8888 while (true) { Socket socket = s.accept(); // 建立连接 OutputStream os = socket.getOutputStream(); // 打开输出流 DataOutputStream dos = new DataOutputStream(os); // 封装输出流 dos.writeUTF("你好,客户端ip地址信息: " + socket.getInetAddress()+ "\t客户端通信端口号: " + socket.getPort()); // 向客户端发送数据 dos.writeUTF("i'm a server ,my name is Java!"); dos.close(); // 关闭打开的输出流 socket.close(); // 关闭打开的socket对象 }// 开始下一此循环 } catch (IOException e) { e.printStackTrace(); } } }21
22. 客户端代码:import java.io.*; import java.net.Socket; public class Client { public static void main(String args[]) { try { // 创建socket对象,指定服务器的ip地址,和服务器监听的端口号 127.0.0.1, 8888 // 客户端在new的时候,就发出了连接请求,服务器端就会进行处理,如果服务器端没有开启服务,那么 这时候就会//找不到服务器,并同时抛出异常==》java.net.ConnectException: Connection // refused: connect Socket s1 = new Socket("127.0.0.1", 8888);//发出了连接请求 InputStream is = s1.getInputStream(); // 打开输入流 DataInputStream dis = new DataInputStream(is); // 封装输入流 System.out.println(dis.readUTF()); // 打印服务器端发送过来的信息 System.out.println(dis.readUTF()); dis.close(); // 关闭输入流 s1.close(); // 关闭打开的socket对象 } catch (IOException e) { e.printStackTrace(); } } }22
23. 23【例9-3】远程数据通信示例,本例由客户端程序和服务器程序两部分组成。 (1)客户端程序 (2)服务器端程序
24. /******************************************* 程序文件名称:SServer.java* 功能:远程数据传输服务器端程序******************************************/import java.io.*; import java.net.*; import javax.swing.*; public class SServer{ public static void main(String args[]) { ServerSocket s_socket=null; Socket socket=null; String s=null; DataOutputStream out=null; DataInputStream in=null; try{ s_socket=new ServerSocket(4321);} catch(IOException e1){System.out.println("ERRO:"+e1);} try{ socket=s_socket.accept(); in=new DataInputStream(socket.getInputStream()); out=new DataOutputStream(socket.getOutputStream()); out.writeUTF("你好:我是服务器,连接成功。"); while(true) { s=in.readUTF(); if (s!=null) break; } JOptionPane.showMessageDialog(null,"服务器收到:"+s); socket.close(); } catch (IOException e) { System.out.println("ERRO:"+e);} } } 24
25. /******************************************* 程序文件名称:SClient.java* 功能: 客户端程序,使用套接字连接服务器 ******************************************/import java.net.*; import java.io.*; import javax.swing.*; public class SClient{ public static void main(String []args) { String s=null; Socket c_socket; DataInputStream in=null; DataOutputStream out=null; try{ c_socket=new Socket("localhost",4321); in=new DataInputStream(c_socket.getInputStream()); out=new DataOutputStream(c_socket.getOutputStream()); while(true) { s=in.readUTF();//读入一个已使用 UTF-8 修改版格式编码的字符串。 if (s!=null) break;//收到一个非空内容为止 } out.writeUTF("我是客户机,收到你返回的信息。"); c_socket.close(); } catch(IOException e){s="无法连接";} JOptionPane.showMessageDialog(null,"客户机收到:"+s); System.exit(0); //退出程序 } }25
26. 269.2.2 同时服务于多个客户的解决方案1、启动多个服务程序 我们可以在服务器端启动多个服务程序,等待客户机的连接请求,每个服务程序处理一个客户机数据,它们只是监听的端口号不同。显然,这个方案耗用资源太多。
27. 279.2.2同时服务于多个客户的解决方案2、应用多线程 在服务程序中应用多线程技术,不同的线程为不同的客户服务。主线程负责等待客户机的连接请求,各个线程负责网络连接,接收客户发送来的信息。
28. 28【例9-4】服务程序应用多线程技术同时处理多个客户机的连接请求。 (1)客户端程序 (2)服务器端程序
29. 299.3 基于UDP协议网络程序设计9.3.1 基于UDP协议的数据报套接字 9.3.2 数据报的程序设计过程 9.3.3 广播数据报套接字
30. 309.3.1 基于UDP协议的数据报套接字 TCP协议通过socket套接字建立一条虚电路。TCP协议的socketserverclientDatagram数据报serverclientUDP数据报的每个数据包要包含目的地址和端口号.
31. 1.基本概念:a.DatagramPacket与DatagramSocket位于java.net包中 b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送数据报的套接字 c.由这两个类所有构成的网络链接是基于UDP协议,是一种不可靠的协议。 之所以不可靠是因为发送方不负责数据是否发送成功,接收方收到数据时也不会 向发送方反馈成功消息,容易导致信息的丢失。 但是这种协议却是快捷的,比如CS(半条命)游戏就是基于UDP协议,否则我们估计 要玩一次游戏后就会把机子砸了,所以我们可以看到游戏有时会失帧。 31
32. 2.使用方法: 要建立基于UDP协议的链接,我们应该先建立套接字
(即发送站或接收站),之后通过套接字发送或接受数据
。 我们先了解一下DatagramSocket和DatagramPacket类 DatagramSocket类:构造方法: DatagramSocket():表示创建一个默认的套接字,并绑定到本地地址和一个随机的端口号 DatagramSocket(int port): 与上面不同的是,绑定到特定端口号,其它不变 DatagramSocket(int port, InetAddress iad):表示创建一个套接字,绑定到特定的端口号及指定地址 DatagramSocket(SocketAddress sad);表示创建一个套接字,绑定到特定的套接字地址 小提示:所谓的本地地址我们可以这样来理解,我们通过“本地连接-支持”中可以看到一个IP地址,这就是本地的IP地址,也暂且理解为本地地址32
33. 基本方法:close(): 关闭套接字 recevie(DatagramPacket dp): 接受数据报 send(DatagramPacket dp): 发送数据报 这里用到数据报,下面介绍数据报: 33
34. DatagramPacket类: 构造方法:(只列出主要的) 接受类型: DatagramPacket(byte[] buf, int length): 用来接受长度为length的buf数据(即数据存于字节数组buf中) 发送类型: DatagramPacket(byte[] buf, int length, InetAddress address, int port); 将length长的buf数据发送到指定的地址的端口号处 DatagramPacket(byte[] buf, int length, SocketAddress address); 将length长的buf数据发送到指定的套接字地址处 上面可知,我们发送数据时构造的数据报应该是发送类型的,而接受数据报时应该是接受类型的34
35. 开始书写代码代码意图: 1.一个接收方,一个发送方 2.当接收方收到发送方发送的消息后,打印发送的消息及发送方的地址和端口号,之后向发送反馈一条信息“接受方:我收到了!” 3.发送方打印出接收方反馈的消息 建立一个请求,先启动接收方,然后启动发送方即可 35
36. 接收方:import java.net.*; public class UdpRecv { public static void main(String[] args) throws Exception { // 确定接受方的IP和端口号,IP地址为本地机器地址 InetAddress ip = InetAddress.getLocalHost(); // 创建接收方的套接字,并制定端口号和IP地址 DatagramSocket ds=new DatagramSocket(4321,ip); // 确定数据报接受的数据的数组大小 byte[] buf=new byte[1024]; // 创建接受类型的数据报,数据将存储在buf中 DatagramPacket dp=new DatagramPacket(buf,1024); // 通过套接字接收数据 ds.receive(dp); // 解析发送方传递的消息,并打印 String strRecv=new String(dp.getData(),0,dp.getLength())+" from "+"发送方的IP地址是:"+dp.getAddress().getHostAddress()+":"+"发送方的端口号是:"+dp.getPort(); System.out.println(strRecv); ds.close(); } }36
37. 发送方:import java.net.*; public class UdpSend {public static void main(String[] args) throws Exception { // 创建发送方的套接字,IP默认为本地,端口号随机 DatagramSocket ds=new DatagramSocket(); // 确定要发送的消息: String str = "你好!接收方!我是发送方小发!"; // 由于数据报的数据是以字符数组传的形式存储的,所以传转数据 byte[] buf = str.getBytes(); // 创建发送类型的数据报,确定发送方的IP地址及端口号,地址为你指定的机器地址 DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.0.53"),4321); // 通过套接字发送数据: ds.send(dp); //确定接受反馈数据的缓冲存储器,即存储数据的字节数组 , 双向的 byte[] getBuf = new byte[1024]; // 创建接受类型的数据报 DatagramPacket getPacket = new DatagramPacket(getBuf, getBuf.length); // 通过套接字接受数据 ds.receive(getPacket); // 解析反馈的消息,并打印 String backMes = new String(getBuf, 0, getPacket.getLength()); System.out.println("接受方返回的消息是:" + backMes); ds.close(); } }37
38. 389.3.2 数据报的程序设计过程1、服务器端发出报文的步骤 (1)定义数据成员。 DatagramSocket socket; DatagramPacket packet; InetAddress address;(用来存放接收方的地址) int port; (用来存放接收方的端口号) (2)创建数据报文Socket对象。 try {socket = new DatagramSocket(1111);} catch(java.net.SocketException e){ } socket 绑定到一个本地的可用端口,等待接收客户的请求。
39. 399.3.2 数据报的程序设计过程1、服务器端发出报文的步骤 (3)分配并填写数据缓冲区(一个字节类型的数组)。 byte[ ] Buf = new byte[256]; 存放从客户端接收的请求信息. (4)创建一个DatagramPacket。 packet = new DatagramPacket(Buf数组, 256字节长度); 用来从socket接收数据,它只有两个参数。 (5)服务器阻塞。 socket.receive(packet); 在客户的请求报道来之前一直等待。
40. 409.3.2 数据报的程序设计过程1、服务器端发出报文的步骤 (6)从到来的包中得到地址和端口号。 InetAddress address = packet.getAddress(); int port = packet.getPort(); (7)将数据送入缓冲区。来自文件,或键盘输入。 (8)建立报文包,用来从socket上发送信息。 Packet = new DatagramPacket(buf, buf.length, address, port); (9)发送数据包。 socket.send(packet); (10)关闭socket。 socket.close();
41. 419.3.2 数据报的程序设计过程2、客户端接收包的步骤 (1)定义数据成员。 int port; InetAddress address; DatagramSocket socket; DatagramPacket packet; byte[ ] sendBuf = new byte[256]; (2)建立socket。 socket = new DatagramSocket(); (3)向服务器发出请求报文。 address = InetAddress.getByName(args[0]); port = parseInt(args[1]); packet = new DatagramPacket(sendBuf, 256, address, port); socket.send(packet);
42. 429.3.2 数据报的程序设计过程2、客户端接收包的步骤 (4)客户机等待应答。 packet = new DatagramPacket(sendBuf, 256); socket.receive(packet);(如果没有到就一直等待,因此程序要设置时间限度) (5)处理接收到的数据。 String received = new String(packet.getData(), 0, packet.getLength()); System.out.println(received);
43. 43数据报工作过程建立数据报socket();建立一个报文包packet等待请求报文建立数据报socket建立一个请求包发出请求获得对方地址构成信息包发送出去创建接收包等待接收
44. 44【例9-5】一个简单的数据报示例。(1)主机1(数据发送方): (2)主机2(数据接收方):
45. 459.3.3 广播数据报套接字 我们把网络上的IP地址划分为A、B、C、D四类,它们是: A类地址为:0.0.0.0~127.255.255.255 B类地址为:128.0.0.0~191.255.255.255 C类地址为:192.0.0.0~223.255.255.255 D类地址为:224.0.0.0~239.255.255.255 广播数据报套接字就是利用网络系统保留的D类地址进行发送和接收数据。一个D类地址称为一个广播组,把要广播或接收广播的主机都加入到同一个广播组中,即设置为相同的D类IP地址。
46. 469.3.3 广播数据报套接字在java中,广播数据报套接字为MulticastSocket类实现,MulticastSocket 是UDP协议 套接字DatagramSocket的子类 ,其构造方法为: (1)MulticastSocket() 创建多播套接字。 (2)MulticastSocket(int port) 创建多播套接字并将其绑定到指定端口。 MulticastSocket类的常用方法: (1)void joinGroup(InetAddress mcastaddr) 加入多播组。 (2)void setTimeToLive(int ttl) 设置在此 MulticastSocket 上发出的多播数据包的默认生存时间,以便控制多播的范围。
47. 47【例9-6】一个广播数据报套接字的演示示例。在这个例子中,一个主机不断地重复播发图像文件,加入到同一组的主机可以随时接收广播的数据内容。接收方接收信息后,将接收到的信息在窗体中显示出来。 (a) 信息发送方播发信息(b) 显示接收到的信息内容(图像文件)
48. 489.4 JApplet编程9.4.1 JApplet及常用方法 9.4.2 JApplet应用示例
49. 499.4.1 JApplet及常用方法JApplet是一个能够嵌入到HTML页面中并在浏览器中运行的Java程序。当使用浏览器对一个包含JApplet的Web页面进行浏览时,浏览器将从Web服务器下载JApplet程序到本地执行。
50. 509.4.1 JApplet及常用方法1、JApplet的主要特性 JApplet类是一个很特殊的容器,是Applet的子类,Applet是从Java的抽象窗口工具集类库(awt)中的Panel类扩展而来的,它将继承Panel的所有属性。因此,JApplet类具有容器的特性,在其内部可以放置swing组件。
51. 519.4.1 JApplet及常用方法2、JApplet的常用方法方法名功 能JApplet()JApplet的构造方法void init() 由浏览器调用,完成初始化。void start()由浏览器调用,开始applet运行。void stop() 由浏览器调用,终止applet执行。void destroy()由浏览器调用,回收分配给applet的资源void play(URL url)播放在URL指定的音频剪辑。AudioClip getAudioClip(URL url)返回 URL 参数指定的 AudioClip 对象。Image getImage(URL url) 返回能被绘制到屏幕上的 Image 对象。URL getDocumentBase()返回文档的URL路径void setJMenuBar(JMenuBar menuBar)设置JApplet的菜单栏。
52. 529.4.1 JApplet及常用方法3、JApplet程序的一般形式 一个JApplet程序必须是JApplet的子类,它必须是public的。JApplet程序的一般形式为: import javax.JApplet.*; public 类名 extends JApplet { public void init(){…;} public void start(){…;} public void stop(){…;} public void destroy(){…;} … }
53. 539.4.1 JApplet及常用方法4、JApplet程序的运行 为了执行Applet,必须在HTML文档中使用特殊的标记,即
标记来调用Applet。例如:
54. 549.4.2 JApplet应用示例 【例9-7】在浏览器中运行JApplet程序。 1. import javax.swing.*; 2. public class Example9_7 extends JApplet 3. { 4. public void init() 5. { 6. JButton btn = new JButton("确定"); 7. add(btn); 8. } 9. }编译这个源程序,得到一个Example9_7.class字节码文件。
55. 55使用记事本之类的文本编辑工具,编写一个HTML文件如下: < applet code=Example9_7.class height=100 width=300 > 将这个超文本文件保存为e9_7.html,并且与Example9_7.class在同一文件目录下。现在使用浏览器打开文件e9_7.html就可看到JApplet程序的运行结果。
56. 56【例9-8】用getImage()方法和drawImage()方法加载和显示图像。 核心语句: 9. public void init() { 10. img = getImage(getDocumentBase(), getParameter("img")); 11. } 12. 13. public void paint(Graphics g) { 14. g.drawImage(img, 0, 0, this); 15. }
57. 57【例9-9】在JApplet程序中使用play()方法播放声音文件。可以使用JApplet的静态方法编写播放.wav等格式的音频文件的程序。 1. import java.swing.*; 2. import java.awt.Graphics; 3. public class Example9_9 extends JApplet { 4. public void paint(Graphics g) { 5. g.drawString("Listen to the music!", 25, 25); 6. play(getDocumentBase(), "茉莉花.wav"); 7. } 8. }
58. 58【例9-10】使用getAudioClip()方法播放声音文件。用getAudioClip()方法建立的AudioClip对象可以处理声音: play() 开始播放; loop() 循环播放; stop() 停止播放。
59. 599.5 基于分布模式的云计算系统9.5.1 分布模式的云计算 9.5.2 简易云计算系统设计
60. 云计算云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。 云是网络、互联网的一种比喻说法。过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。 狭义云计算指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源; 广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。 这种服务可以是IT和软件、互联网相关,也可是其他服务。它意味着计算能力也可作为一种商品通过互联网进行流通。60
61. 云计算 云计算[1]拼音Yún jìsuàn;云计算由一系列可以动态升级和被虚拟化的资源组成,这些资源被所有云计算的用户共享并且可以方便地通过网络访问,用户无需掌握云计算的技术,只需要按照个人或者团体的需要租赁云计算的资源。云计算是继1980年代大型计算机到客户端-服务器的大转变之后的又一种巨变。云计算的出现并非偶然,早在上世纪60年代,麦卡锡就提出了把计算能力作为一种像水和电一样的公用事业提供给用户的理念,这成为云计算思想的起源。在20世纪80年代网格计算、90年代公用计算,21世纪初虚拟化技术、SOA、SaaS应用的支撑下,云计算作为一种新兴的资源使用和交付模式逐渐为学界和产业界所认知。中国云发展创新产业联盟评价云计算为“信息时代商业模式上的创新”。61
62. 629.5.1 分布模式的云计算在传统的客户/服务环境中,一般有一个功能强大的计算机作为服务器为多个客户提供服务, 下面将讨论一种以客户端为核心、多个服务器为其提供服务的计算模式。这种客户/服务器方式的云计算非常适合分布式系统模型下实现,该模型可以分为3个角色:管理节点、子节点和客户端。管理节点和子节点构成了云计算的服务器端,客户端通过对API的调用实现对云计算系统的访问,并通过API整合为不同的应用程序。
63. 639.5.1 分布模式的云计算在这种分布模型下,一个并行应用很容易使用这种客户/服务器模式来设计:一个客户可以将一个大的应用分成若干小的问题,这些小的问题可以由多个服务器程序(子节点)同时处理,所以服务器程序对相应问题求得解答后,再发送给客户机。客户机汇集所有从服务器程序发来的结果,然后再输出给用户。
64. 649.5.1 分布模式的云计算在具体实现这个模型的过程中,要将多个可用服务器(子节点)和它们的Internet域名保存在一个node.txt文件中,这个文件称为子节点配置文件,由客户程序存取它。 客户机同时还要读取另一个文件root.txt,称为用户配置文件,它包括用户定义的应用参数。 子节点配置文件node.txt和用户配置文件root.txt构成管理节点。
65. 659.5.1 分布模式的云计算基于分布模式的云计算系统
66. 669.5.2 简易云计算系统设计 下面设计一个简易云计算系统,该系统实现由多台服务器共同完成n 阶矩阵的乘法运算任务。 1、系统结构
67. 67
68. 689.5.2 简易云计算系统设计2、设计示例 我们现在用C/S结构求解矩阵乘法问题。假定有多台计算机处于WAN中并使用TCP/IP进行通信。使用一个客户和几个服务器求解n * n的“大型”矩阵乘法问题。客户通过子节点配置文件“node.txt”中获取所有的服务器程序必要的信息。如服务器的个数、IP地址或主机名。例如,node.txt文件中的内容为: 3 192.168.1.1 192.168.1.2 192.168.1.3 表示有三个子节点及相应的IP地址。
69. 699.5.2 简易云计算系统设计然后建立与所有服务的Scoket连接和I/O流。客户从用户配置文件“root.txt”获得矩阵维数N的值,再创建三个矩阵A,B,C,并输入A,B的值,在客户端对任务进行分解,并向每个节点发送一个子任务。这个任务要求每个服务程序收到这个请求之后,完成计算并把结果返回客户。而客户等待各子节点的回复,并将计算结果拼接起来,组成矩阵C。最后,客户将得到结果矩阵C返回给用户。
70. 70【例9-11】 简易云计算系统计算矩阵乘法。(a)子节点 (b)客户机端
71. 71小结实现网络功能要靠URL类, URLConection类, Socket类和DatagramSocket类 网络上的数据传送是将网络连接转换成输入输出流 DataInputStream和DataOutputStream (PrintStream)是网间流的载体. URL适用于web应用,如访问http服务器是高层服务
72. 72小结环回地址可用于在本地机器上调试网络程序 Socket适用于面向连接的,可靠性要求高的应用 Datagram适用于效率要求高的应用 Socket是由IP和端口构成的一种网上通信链路的一端 Socket通信要分别运行服务器和客户程序 服务器程序是多线程的,可处理多个客户的请求
73. 73作业编写一个会话程序 要求: 会话双方可以自由通话,看到对方发来“bye”则退出
PPT 图集
相关PPT
第 9 章 java网络
第9章 Java异常
第9章 Java 字符串
08 Java网络
网络工程 第三章 网络互联设备
第1章 Java 入门
Java 网络编程
第2章 网络系统的选择
《Java2面向对象程序设计基础》第8章:Java的网络编程
java网络编程