收藏 分享(赏)

Thinking in Java 15(分布式计算).ppt

上传人:yjrm16270 文档编号:4789863 上传时间:2019-01-13 格式:PPT 页数:44 大小:293KB
下载 相关 举报
Thinking in Java 15(分布式计算).ppt_第1页
第1页 / 共44页
Thinking in Java 15(分布式计算).ppt_第2页
第2页 / 共44页
Thinking in Java 15(分布式计算).ppt_第3页
第3页 / 共44页
Thinking in Java 15(分布式计算).ppt_第4页
第4页 / 共44页
Thinking in Java 15(分布式计算).ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、Java编程思想,第十五章:分布式计算,网络编程简介(socket),同一个网络上的机器间信息交换网络编程是基于 IP 协议的网络编程通过 streams 和 sockets 来实现,识别一台机器,DNS(Domain Name System) 名称: , , 等等 IP 地址: 123.255.28.120 InetAddress InetAddress.getByName(String)/ Determines the IP address of a host:/ or 206.26.48.100,/: c15:WhoAmI.java ( p653 ) / Finds out your

2、network address when / youre connected to the Internet.import .*; public class WhoAmI public static void main(String args) throws Exception if(args.length != 1) System.err.println(“Usage: WhoAmI MachineName“);System.exit(1);InetAddress a = InetAddress.getByName(args0);System.out.println(a); /:,Ans:C

3、:Java WhoImI localhost Localhost/127.0.01C:Java WhoImI tju Tju/127.0.0.1,IP 地址分配,静态 IP 和动态 IP 静态IP是一个固定的地址,它必须是唯一的 一个动态 IP 是由在同一个网络中的 DHCP ( Dynamic Host Configuration Protocol ) 服务器来分配的,IP 地址分配,Internet,DHCP服务器,静态 IP,动态 IP,服务器和客户机,服务器: 提供服务,比如Web服务器,FTP服务器客户机: 连接服务器来请求信息,服务器和客户机,Internet,Web 服务器 Ft

4、p 服务器,服务器,客户机,端口1,端口 2,Sockets,端口( port ),一个IP地址并不足以完整标识一个服务器 一台物理性的机器中,往往运行着多个服务器(程序) 端口定义一台机器上的一种服务(软件抽象概念) 系统分配总数 11024 你可以定义自己的端口从 1025 开始,Sockets,一个服务器与客户机之间连线的终端 针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。 一个 socket 可以被认为是一个本地文件 你可以通过 streams 读/写一个 socket,ServerSocket,服务器使用一个 ServerSocket 对象来

5、侦听一个连接的端口 ServerSocket.accept( ):一旦一个客户建立了一个连接,将返回一个 socket accept( )方法会暂时陷入停顿状态(阻塞),直到某个客户尝试同它建立连接。但其他进程仍能正常运行,简单的服务器和客户端,服务器: ( p656 )客户端: ( p658 ),/: c15:JabberServer.java 服务器 (先运行) ( p656 ) / Very simple server that just / echoes whatever the client sends. import java.io.*; import .*; public cla

6、ss JabberServer / Choose a port outside of the range 1-1024:public static final int PORT = 8080;public static void main(String args) throws IOException ServerSocket s = new ServerSocket(PORT);System.out.println(“Started: ” + s); /等待客户端连上,try / Blocks until a connection occurs:Socket socket = s.accep

7、t();try System.out.println( “Connection accepted: “+ socket);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream();/ Output is automatically flushed by PrintWriter:PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true

8、);,while (true) String str = in.readLine(); / 从客户端读取信息if (str.equals(“END“) break;System.out.println(“Echoing: “ + str); /在屏幕上输出读取信息out.println(str); / 输出到客户端/ Always close the two sockets. finally System.out.println(“closing.“);socket.close(); finally s.close(); /:,/: c15:JabberClient.java 客户端(后运行)

9、 ( p658 ) / Very simple client that just sends / lines to the server and reads lines / that the server sends.import .*; import java.io.*;public class JabberClient public static void main(String args) throws IOException / Passing null to getByName() produces the/ special “Local Loopback“ IP address,

10、for/ testing on one machine w/o a network:,InetAddress addr = InetAddress.getByName(null);/ Alternatively, you can use / the address or name:/ InetAddress addr = / InetAddress.getByName(“127.0.0.1“);/ InetAddress addr = / InetAddress.getByName(“localhost“);System.out.println(“addr = “ + addr);Socket

11、 socket = new Socket(addr, 8080); /JabberServer.PORT,/ Guard everything in a try-finally to make/ sure that the socket is closed:try System.out.println(“socket = “ + socket);BufferedReader in =new BufferedReader(new InputStreamReader(socket.getInputStream();/ Output is automatically flushed by Print

12、Writer:PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true);,for(int i = 0; i 10; i +) out.println(“howdy ” + i); / 输出到服务器String str = in.readLine(); / 从服务器读回信息System.out.println(str); / 在屏幕上输出读回信息out.println(“END“); finally System.out.println(“cl

13、osing.“);socket.close(); /:,Ans: Client addr = localhost/127.0.0.1 socket = Socketaddr=localhost/127.0.0.1,port=8080,localport=1036 howdy 0 howdy 1 howdy 2 howdy 3 howdy 4 howdy 5 howdy 6 howdy 7 howdy 8 howdy 9 closing.,Ans: Server Started: ServerSocketaddr=0.0.0.0/0.0.0.0,port=0,localport=8080 Con

14、nection accepted: Socketaddr=/127.0.0.1,port=1036,localport=8080 Echoing: howdy 0 Echoing: howdy 1 Echoing: howdy 2 Echoing: howdy 3 Echoing: howdy 4 Echoing: howdy 5 Echoing: howdy 6 Echoing: howdy 7 Echoing: howdy 8 Echoing: howdy 9 closing.,TCP vs. Datagrams,消息通过包来传送TCP(Transfer Control Protocol)

15、: 有保证的传递,慢UDP(User Datagram Protocol): 不可靠,快,Datagrams : UDP,类 DatagramSocket 用来支持数据报通讯:DatagramSocket( );DatagramSocket(int port);类 DatagramPackte 传输数据的载体:DatagramPackte(byte buf, int length)DatagramPackte(byte buf, int length,InetAddress addr, int port)void receive(DatagramPacket p)void send(Datag

16、ramPacket p),使用UDP编程 客户端 import java.io.*; import .*; import java.util.*; class QuoteClientpublic static void main(String args)int port;InetAddress address;DatagramSocket socket = null;DatagramPacket packet;byte sendBuff = new byte256;if(args.length != 2)System.out.println(“Usage: java QuoteClient “

17、);return;,trysocket = new DatagramSocket(); / bind to the socketcatch(.SocketException e)System.err.println(“Could not create datagram socket.“);if(socket != null)try/ send requestport = Integer.parseInt(args1);address = InetAddress.getByName(args0);packet = new DatagramPacket(sendBuff,256,address,p

18、ort);socket.send(packet);/ get responsepacket = new DatagramPacket(sendBuff,256);socket.receive(packet);String received = new String(packet.getData(),0);System.out.println(“Quote of the Moment:“ + received);socket.close();catch(IOException e)System.err.println(“IOException: “ + e);e.printStackTrace(

19、); ,使用UDP编程 服务器端 import java.io.*; import .*; import java.util.*;class QuoteServerThread extends Threadprivate DatagramSocket socket = null;private DataInputStream qfs = null;QuoteServerThread()super(“QuoteServer“);trysocket = new DatagramSocket(); System.out.println(“QuoteServer listening on port:“

20、 + socket.getLocalPort();catch(.SocketException e)System.err.println(“Could not create datagram socket.“);this.openInputFile();,public void run()if(socket = null)return;while(true)trybyte buf = new byte256;DatagramPacket packet;InetAddress address ;int port;String dString = null;/ receice requestpac

21、ket = new DatagramPacket(buf,256);socket.receive(packet);address = packet.getAddress();port = packet.getPort();/ send responseif(qfs = null)dString = new Date().toString();elsedString = getNextQuote();dString.getBytes(0,dString.length(),buf,0);packet = new DatagramPacket(buf,buf.length,address,port)

22、;socket.send(packet);catch(IOException e)System.err.println(“IOException: “ + e);e.printStackTrace();,protected void finalize()if(socket != null)socket.close();socket = null;System.out.println(“Closing datagram socket.“);private void openInputFile()tryqfs = new DataInputStream(new FileInputStream(“o

23、ne_liners.txt“);catch(java.io.FileNotFoundException e)System.out.println(“Could not open quote file. Serving time instead.“);,private String getNextQuote()String returnValue = null;tryif(returnValue = qfs.readLine() = null)qfs.close();this.openInputFile();returnValue = qfs.readLine(); /the file has

24、at least one input linecatch(IOException e)returnValue = “IOException occurred in server.“;return returnValue; class QuoteServerpublic static void main(String args)new QuoteServerThread().start(); ,URL(Uniform Resouse Locator),URL: 统一资源位置 例如: 使用 URL getDocumentBase() 来得到一个基本的 URL URL 对象标识在网络上的一个资源,

25、JNLP (Java Network Launch Protocol)简介,签名 appletsJava 网络加载协议 (JNLP) 和 Java Web Start (JAWS),签名 applets,Sandbox 模型: applet 访问本地磁盘和连接本地网络被拒绝 一个已签名的 applet 将允许用户验证其合法性 证书: 将一个 applet 进行签名, 需要将这个 applet 封装在一个 jar 文件中并将 jar文件用一个证书或者密钥进行标记,签名 applets: 证书,证书: 由一个可信实体颁发, 例如VeriSign, Thawte用于检验目的: 你可以创建自己的证书,

26、keytool genkey alias mykey keystore keytool list keystore jarsigner keystore jarfile mykey,签名applets,当加载一个 applet, 浏览器将提示用户来验证 applet,签名 applets,证书的更多信息,签名 applets,可信的 applet 将允许 applet 访问本地硬盘, 例如 JFileChooser,JNLP and Java Web Start,Applets 被限制在浏览器中 JNLP 允许一个应用程序被下载并执行 一个 JNLP 应用程序可以从 Internet 下载资源

27、 JNLP: Java Network Launch Protocol Java 网络加载协议,JNLP and Java Web Start,Sun公司的实现: JAWS JAWS: Java Web Start 程序员园地: http:/ 确认 jnlp.jar 在 CLASSPATH中,JNLP 应用程序,需要一个发布文件: 一个 XML 文件可以给予客户端信息使其下载和安装 可以用证书签名或者不签名 必须使用 JNLP 服务来得到访问本地资源的权限 : javax.jnlp 若使用其他方法得到本地资源将会引起安全性异常错误,JNLP: .jnlp 文件,XML文件格式描述下载 URL, 安全性,以及有关 jar 的一般信息,配置一个JNLP应用程序的步骤,编译所有的 class 文件 将所有文件打包到一个 jar 文件中 用证书对 jar 进行签名 建立一个 JNLP 文件 建立一个具有指向 JNLP 文件超链接的HTML 文件,Java Web Start 应用程序管理,总结,未经签名的 applets 不能访问本地资源: sandbox model 一个 applets 要经过可信实体颁发的证书来进行签名 JNLP 是一个允许应用程序被远程配置的协议 JAWS 是 Sun 公司的一种 JNLP 实现,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报