欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第12章网络程序设计课件.ppt

    • 资源ID:2163323       资源大小:783.51KB        全文页数:85页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第12章网络程序设计课件.ppt

    1,第12章 网络程序设计,2,12.1 网络的基本概念,java语言是Internet上的世界语。网络应用是Java语言取得成功的领域之一,它已经成为现在Internet上最流行的一种编程语言。Java语言在网络编程方面提供了许多方便,其他语言往往需要数页代码才能完成的事情,在Java中可能只需要一条语句就可以。,3,1、Java的网络通信分为三个层次:最高一级的网络通信:从网络上下载Applet。客户端浏览器通过HTML文件中的标记来识别Applet,并解析Applet的属性,通过网络获取Applet得字节码文件。(由浏览器提供)声音文件和图象文件的获取是次一级的通信。通过类URL的对象指明文件所在位置,并从网络上下载声音和图象文件。(由Java开发环境提供)最低一级的通信是利用包中提供的类直接在程序中实现网络通信。(由Java语言开发包提供),4,2、网络协议,应用层:使用URL、URLConnection 类,传输层:使用Socket、ServerSocket 类,5,3、Java中的网络支持,包中的主要的类和可能产生的例外包括:面向IP层的类:InetAddress面向应用层的类:URL、URLConnection面向网络层的类:TCP协议相关类:Socket、ServerSocketUDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocket可能产生的例外:BindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceException,3、Java中的网络支持,6,4、传输层协议TCP与UDP,TCP(Transport Control Protocol)两主机之间有连接的、可靠的、端对端(end-to-end)的数据流的传输如http,ftp,telnet 的传输层均使用此协议UDP(User Datagram Protocol)从一台机器向另一台机器以无连接的、数据报的方式进行通讯的协议如:email可以使用UDP,7,5、主机与端口,如何确定通讯的目标,两部分:主机使用IP地址或域名端口,用于区分同一台主机上的不同的进行通讯的应用进程端口01023系统使用102465535用户使用,最好8000以上,8,6、Java与网络,Java提供的网络功能有三大类:URL,Socket,Datagram.URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据.Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道.Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上.,9,12.2 URL的使用,在WWW上,每一信息资源都有统一的且唯一的地址,该地址就叫URL(Uniform Resource Locator),它是WWW的统一资源定位标志。12.2.1 URL的组成资源类型(协议)存放资源的主机域名资源文件名端口,10,用字符串表示Internet网络上资源的地址,指向World Wide Web 上的一个资源。http:/:80/dir/file.htm协议名(http、ftp、file等)资源位置(主机域名,也可用IP地址)端口号(服务器监听程序的端口。WWW服务端口隐含值为80,FTP 21,Telnet 23)路径名(文件在机器中的路径名。资源文件或CGI程序等)引用(#指向资源文件的某一个位置),11,12.2.2 URL类,.URL 创建URL对象代表一个URL资源构造方法1)URL(String spec)例:URL url1=new URL(“http:/:80/file”);2)URL(URL baseURL,String relativeURL)URL url2=new URL(url1,“file.html”);例:URL url1=new URL(http:/:120/)URL url2=new URL(url1,“index.html”);,12,3)URL(String protocol,String host,int port,String file)4)URL(String protocol,String host,String file)使用缺省80端口注意:构造函数抛出MalformedURLException,13,URL类的常用方法,方法1 取出URL的指定成分信息 url1.getProtocol()/协议名 url1.getHost()/主机名 url1.getPort()/端口号 url1.getFile()/文件名方法2 InputStream url1.openStream()/获得一个输入流String toString()/将此URL对象转换为字符串的形式,14,例12-1 URL的使用,import.*;public class URLTest public static void main(String args)try URL hp=new URL(http:/:80/file);System.out.println(Protocol:+hp.getProtocol();System.out.println(Port:+hp.getPort();System.out.println(Host:+hp.getHost();System.out.println(File:+hp.getFile();System.out.println(Ext:+hp.toExternalForm();catch(MalformedURLException e)System.out.println(e.toString();,运行结果-,运行结果,15,Protocol:httpPort:80Host:File:/fileExt:http:/,16,*利用URL获取网络资源,创建URL对象使用URL对象的openStream()方法,返回一个InputStream。从此InputStream即可读入相应资源。,17,例12-2使用URL类获取远程服务器端的数据,import.*;import java.io.*;public class UrlSitepublic static void main(String args)if(args.length1)System.out.println(没有给出URL);System.exit(1);elsefor(int i=0;iargs.length;i+)urlSite(argsi);,18,public static void urlSite(String urlname)String s;URL url=null;InputStream urlstream=null;tryurl=new URL(urlname);catch(Exception e)System.out.println(URL名字错误);tryurlstream=url.openStream();DataInputStream dat=new DataInputStream(urlstream);while(s=dat.readLine()!=null)System.out.println(s);catch(IOException e)System.out.println(URL文件打开错误);,19,键入java UrlSite file:/e:/UrlSite.java的运行结果,若键入java UrlSite http:/?,例12-3 URL类使用举例,import.*;import java.io.*;public class URL12_3 public static void main(String args)try URL urladd=new URL(http:/System.out.println(urladd.getAuthority();System.out.println(urladd.getDefaultPort();System.out.println(urladd.getFile();System.out.println(urladd.getHost();System.out.println(urladd.getPath();System.out.println(urladd.getProtocol();,20,BufferedReader readur1=new BufferedReader(new InputStreamReader(urladd.openStream();String content=;String line=;while(line=readur1.readLine()!=null)content+=line;readur1.close();FileWriter outfile=new FileWriter(D:output.html);outfile.write(content);outfile.close();catch(Exception e)e.printStackTrace();,21,运行结果,80/technetwork/java/,22,23,12.2.3 URLConnection类,一个URLConnection对象代表一个Java程序与URL资源的通讯连接。通过它可对这个URL资源读或写。通过openConnection方法,获得URLConnection类对象 1、创建URLConnection类的对象URL url=new URL(“http:/”):URLConnection connect=url.openConnection();URLConnection url.openConnection()成功,返回一个URLConnection对象不成功,抛出IOException例外,24,2、建立输入/输出数据流,URLConnection类的读写渠道 getInputStream()getOutputStream(),25,例12-4使用URLConnection类获取远程服务器端的数据,import.*;import java.io.*;public class Connect12_4public static void main(String args)String urlname=“http:/;String s;URL url=null;URLConnection conn=null;InputStream in=null;tryurl=new URL(urlname);conn=url.openConnection();catch(Exception e)System.out.println(URL名字错误);,tryin=conn.getInputStream();DataInputStream dat=new DataInputStream(in);while(s=dat.readLine()!=null)System.out.println(s);dat.close();catch(Exception e)System.out.println(URL文件打开错误);,26,运行结果(部分信息),ar mediav_ad_width=950;var mediav_ad_height=90;var mediav_default_turl=http:/,27,28,类InetAddress可以用于标识网络上的硬件资源,它提供了一系列方法以描述、获取及使用网络资源。InetAddress类没有构造函数。通常是用它提供的静态方法来获取:public static InetAddress getByName(String host)host可以是一个机器名,也可以是一个IP地址或一个DSN域名。public static InetAddress getLocalHost()这二个方法通常会产生UnknownHostException例外,应在程序中捕获处理。InetAddress类的主要方法:public byte getAddress():获得本对象的IP地址(存放在字节数组中)。public String getHostAddress():获得本对象的IP地址“%d.%d.%d.%d”。public String getHostName():获得本对象的机器名。,12.2.4 InetAddress类,29,import.*;public class getIP12_5public static void main(String args)InetAddress pku=null;try pku=InetAddress.getByName();catch(UnknownHostException e)System.out.println(pku);,例12-5 使用InetAddress查找IP地址,30,通过InetAddress,可以获取本机的IP地址:import.*;public class getLocalHostTest public static void main(String args)InetAddress myIP=null;try myIP=InetAddress.getLocalHost();catch(UnknownHostException e)System.out.println(myIP);,例12-6 使用InetAddress获取本机IP地址,A-6F708DEE6CE74/169.254.120.63,31,12.3 Socket通信,端到端的连接与通信网络上的两个程序(进程)通过一个双向的通信连接实现数据的交换。双向链路的一端称为一个socket(套接字)主机端口(用于区分同一台主机上的不同的通信应用进程:01023系统 102465535用户),32,12.3.1 TCP与Socket,有连接的服务中,服务器进程端口绑定一个Socket,监听客户请求请求服务进程 响应请求服务进程与客户进程各绑定一个Socket,进行相互通讯。,33,12.3.2 UDP与Datagrams,使用UDP协议传送数据时,把数据分割为各自独立的多个数据报(Datagrams),分别发送,数据报是否到达、到达顺序以及内容是否正确不保证。IP以及端口地址包含在报头中,34,12.3.3 使用Socket编程,使用socket在Client程序和Server程序间建立连接(通讯的通道)1、Socket 编程步骤创建socket打开连接到socket的输入/输出流。按照一定的协议对socket进行读写操作,实现所要完成的主要工作。关闭socket,35,2、Socket类的构造方法,构造方法:Socket(InetAddress addr,int port)Socket(String addr,int port)因是TCP支持类,所以需要端口号。使用该类扮演客户机的角色。TCP连接会涉及客户机/服务器双方端口号。但客户机端口由TCP/IP软件自动分配。方法:InputStream getInputStream();outputStream getoutputStream();,36,3、使用Socket编程,Server端通讯过程,Client端通讯过程,37,4、socket通信,38,4、socket通信,建立Socket在客户端:try Socket client=new Socket(host,4444);catch(IOException e)在服务器端:try ServerSocket server=new ServerSocket(4444);catch(IOException e)Socket socket=null;try socket=server.accept();/等待客户端连接catch(IOException e),39,5、Socket通信演示,演示一个简单的服务器与客户的交互,即服务器等待,客户访问,相互通一次信息.,40,Socket,.8.5 Socket,创建服务器(端口号),定义数据成员,服务器等待网络连接,建立socket流,读客户 端信息,向用户发出一个字符串,创建Socket实例,定义数据成员,建立socket流,读socket流(接收并显示),送用户名给服务器,关闭流,waiting for user,127.0.0.1 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User:java,Login successful,41,Socket,例:显示服务器与客户机间的通信(服务器端),PrintStream ps=null;DataInputStream dis=null;String username;ServerSocket serverSocket=null;Socket clientSocket=null;,try serverSocket=new ServerSocket(1111);catch(IOException e)System.out.println(“Error”+e);System.exit(1);,try clientSocket=serverSocket.accept();catch(IOException e)System.out.println(Accept failed.);System.exit(1);,创建服务器(端口号),定义数据成员,服务器等待网络连接,42,Socket,.,ps=new PrintStream(clientSocket.getOutputStream();dis=new DataInputStream(clientSocket.getInputStream();,建立socket流,向客户发出登录要求,ps.println(login:);ps.flush();,43,Socket,ps.println(login sucessful);ps.flush();System.out.println(username+has logged off);,读客户 端信息,通知客户连接完毕,if(username=dis.readLine()=null)System.out.println(readLine returned null);System.exit(1);System.out.println(Username:+username);,44,Socket,例:显示服务器与客户机间的通信(客户端),创建Socket实例,PrintStream output;DataInputStream input;String string;Socket socket=null;,定义数据成员,trysocket=new Socket(127.0.0.1,1111);catch(IOException e)System.out.println(Error”+e);return;,input=new DataInputStream(socket.getInputStream();output=new PrintStream(socket.getOutputStream();,建立socket流,45,Socket,.,System.out.println(input.readLine();,读socket流(看到提示),System.in.read(bArray);String s=new String(bArray,0);output.println(s);,从键盘上读送用户名送给服务器端,关闭流,socket.close();input.close();output.close();System.out.println(Done);,System.out.println(input.readLine();System.out.print(Logging off.);,读服务器反馈,46,Socket,.8.5 Socket,创建服务器(端口号),定义数据成员,服务器等待网络连接,建立socket流,读客户 端信息,向用户发送字符串,创建Socket实例,定义数据成员,建立socket流,读socket流(看到提示),送用户名给服务器,关闭流,waiting for user,127.0.0.1 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User:java,Login successful,47,6、Socket与I/O流,一个socket可以持有两个流输入流与输出流,48,Client端,用Server端主机号,端口号创建Socket对象Socket mClient=new Socket(166.111.3.3,8012);利用Socket实现网络 I/OInputStream rDIn=mClient.getInputStream();OutputStream rD=mClient.getOutputStream();DataInput Din=new DataInputStream(rDIn);DataOutput Dout=new DataOutputStream(rD);关闭Socket,结束通讯mClient.close();,49,例12_7 C/S例 client 端,import java.io.*;import.*;public class CLient12_7 public static void main(String args)try Socket socket1=new Socket(127.0.0.1,8888);BufferedReader sin=new BufferedReader(new InputStreamReader(socket1.getInputStream();PrintWriter sout=new PrintWriter(socket1.getOutputStream();BufferedReader input=new BufferedReader(new InputStreamReader(System.in);,50,String ask=input.readLine();while(!ask.equals(end)sout.println(ask);sout.flush();System.out.println(server answer:+sin.readLine();ask=input.readLine();sin.close();sout.close();socket1.close();catch(Exception e)/main/class c,byeend,51,Server端,创建一个ServerSocket对象(指定端口号).ServerSocket mSer=new ServerSocket(8012);在该端口监听,当收到Client发出的请求时,创建一个Socket对象与此Client通讯:Socket socket=ss.accept();接收到Client请求之前,该语句处于阻塞状态。通过Socket类的I/O流对象与Client端通信。结束通信,关闭输入输出流、关闭Socket对象。撤消服务时,关闭 ServerSocket对象:mServer.close()。Socket方法:InetAddress getInetAddress()返回socket连接的地址,52,例12_8 C/S例Server端,import java.io.*;import.*;public class Server12_8 public static void main(String args)try ServerSocket ss=new ServerSocket(8888);Socket socket=ss.accept();BufferedReader cin=new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter cout=new PrintWriter(socket.getOutputStream();BufferedReader input=new BufferedReader(new InputStreamReader(System.in);String answer,ask;ask=cin.readLine();,53,c/s例Server端,while(!ask.equals(bye)System.out.println(client ask:+ask);answer=input.readLine();cout.println(answer);cout.flush();ask=cin.readLine();cin.close();cout.close();socket.close();ss.close();catch(Exception e)/main/class s,例12_9简单的客户服务器程序,import java.io.*;import.*;public class Client12_9 public static void main(String args)try Socket sc=new Socket(127.0.0.1,9999);sc.setSoTimeout(10000);System.out.println(是否已建立连接:+sc.isConnected();System.out.println(接收缓冲区的默认大小:+sc.getReceiveBufferSize();System.out.println(发送缓冲区的默认大小:+sc.getSendBufferSize();PrintWriter out=new PrintWriter(sc.getOutputStream(),true);BufferedReader in=new BufferedReader(new InputStreamReader(sc.getInputStream();,54,for(int i=1;i+msg);out.println(END);sc.shutdownOutput();sc.shutdownInput();System.out.println(输入流是否已关闭:+sc.isInputShutdown();System.out.println(输出流是否已关闭:+sc.isOutputShutdown();sc.close();catch(Exception e)e.printStackTrace();,55,服务器端程序:ExServer12_9,java.io.*;import.*;public class ExServer12_9 public static void main(String args)try ServerSocket soc=new ServerSocket(9999);soc.setReceiveBufferSize(1024);soc.setSoTimeout(10000);System.out.println(服务器端接收缓冲区大小为:+soc.getReceiveBufferSize();System.out.println(启动服务器成功,等待端口号为:9999);Socket client=soc.accept();System.out.println(连接成功!来自+client.toString();BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream();PrintWriter out=new PrintWriter(client.getOutputStream(),true);,56,while(true)String str=;str=in.readLine();if(str!=)System.out.println(str);if(str.equals(END)|client.isClosed()System.out.println(客户已退出!);break;out.println(服务器响应:+str);out.flush();System.out.println(服务器已经关闭!);soc.close();client.close();catch(Exception e)e.printStackTrace();,57,58,示范例题,简单的服务器和客户机程序Server1.java Client1.java,59,12.3.4多客户端通讯,服务器通信程序采用多线程,每个线程负责与一个客 户对话 sSocket=new Serversocket(8000)while(listening)tSocket=sSocket.accept();new ServerThread(tSocket).start()ServerThread extends Thread public void run()服务器端通信程序,例12_10 多客户端通讯,public class ExMulServer12_10 public static void main(String args)try int clientNumber=1;Socket socket;ServerSocket server=new ServerSocket(9999);System.out.println(服务器端程序已启动!);while(true)System.out.println(等待下一个连接!);socket=server.accept();System.out.println(客户+clientNumber+连接成功,其IP地址是:+socket.getInetAddress();new ServerThread(socket,clientNumber);clientNumber+;catch(Exception e)e.printStackTrace();,60,class ServerThread extends Threadprivate Socket socket;private int clientNumber;ServerThread(Socket socket,int clientNumber)this.socket=socket;this.clientNumber=clientNumber;start();,61,public void run()tryBufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter out=new PrintWriter(socket.getOutputStream(),true);while(true)String str=;str=in.readLine();if(str!=)System.out.println(clientNumber+str);if(str.equals(END)|socket.isClosed()System.out.println(客户端+clientNumber+响应+str);out.flush();out.println(对客户端+clientNumber+服务已经关闭);socket.close();catch(Exception e)e.printStackTrace();,62,63,例:C/S间的流式Socket通讯,ThreadServerTest.java实现服务器的功能,在8080端口监听当检测到有客户机的请求时,产生一个新的线程由该线程负责与客户机的通讯,而主线程继续监听其他可能的请求。MultiClientTest.java向服务器主机的特定端口提出请求连接建立后完成对服务器的读写,64,12.4 基于UDP的网络通信,TCP/IP传输层由两个并列的协议:TCP,UDP.一般套接字(TCP)提供一个可靠的传输模型作为两个网络端点的字节流,有纠错能力.UDP没有保持的连接和数据流,数据报是一个网络上发送的独立信息,它的到达,到达时间,以及内容不能得到保证。,65,1、TCP和UDP,TCP提供高可靠性服务,适用于一次要传输交换大量报文的情况,信道上传递的包不需要源地址和目的地址UDP提供高效率服务,适用于依次传输交换少量报文的情形(如数据库查询),每个数据包要包含目的地址和端口号.数据报文的使用以包为中心:打包,拆包.J包支持两种不同的在网络上送数据的方法:一般套接字和数据报文套接字.,66,2、发出报文的标准步骤,1)定义数据成员 DatagramSocket socket;DatagramPacket packet;InetAddress address;(用来存放接收方的地址)int port;(用来存放接收方的端口号)2.)创建数据报文Socket对象 try socket=new DatagramSocket(1111);catch(.SocketException e)socket 绑定到一个本地的可用端口,等待接收客户的请求.,67,2、发出报文的标准步骤,3)分配并填写数据缓冲区(一个字节类型的数组)byte Buf=new byte256;存放从客户端接收的请求信息.4)创建一个DatagramPacket packet=new DatagramPacket(buf,256);用来从socket接收数据,它只有两个参数 5)服务器阻塞 socket.receive(packet);在客户的请求报道来之前一直等待,68,2、发出报文的标准步骤,6.)从到来的包中得到地址和端口号 InetAddress address=packet.getAddress();int port=packet.getPort();7)将数据送入缓冲区 或来自文件,或键盘输入8)建立报文包,用来从socket上发送信息 packet=new DatagramPacket(buf,buf.length,address,port);9)发送数据包 12)关闭socket socket.send(packet);socket.close();,69,3、客户端接收包的步骤,1)定义数据成员 int port;InetAddress address;DatagramSocket socket;DatagramPacket packet;byte sendBuf=new byte256;2.)建立socket socket=new DatagramSocket();,70,3、客户端接收包的步骤,3)向服务器发出请求报文 address=InetAddress.getByName(args0);port=parseInt(args1);packet=new DatagramPacket(sendBuf,256,address,port);socket.send(packet);这个包本身带有客户端的信息4)客户机等待应答

    注意事项

    本文(第12章网络程序设计课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开