java(教学0)java网络编程课件.ppt

上传人(卖家):晟晟文业 文档编号:3711234 上传时间:2022-10-06 格式:PPT 页数:98 大小:818.04KB
下载 相关 举报
java(教学0)java网络编程课件.ppt_第1页
第1页 / 共98页
java(教学0)java网络编程课件.ppt_第2页
第2页 / 共98页
java(教学0)java网络编程课件.ppt_第3页
第3页 / 共98页
java(教学0)java网络编程课件.ppt_第4页
第4页 / 共98页
java(教学0)java网络编程课件.ppt_第5页
第5页 / 共98页
点击查看更多>>
资源描述

1、第10章 网络编程HTTP概述 URL URLConnection读写 InetAddres类 Socket 数据报 本章内容本章内容HTTP概述概述1.1.统一资源定位器统一资源定位器URLURL URL-URL-Uniform Resource Locator,表示表示InternetInternet上上某一资源的地址。某一资源的地址。浏览器通过解析给定的浏览器通过解析给定的URLURL可以在网络上查找可以在网络上查找相应的文件或其他资源。相应的文件或其他资源。2 2URLURL的组成的组成 protocol:/:port_number/file_nameprotocol:/:port_n

2、umber/file_name 其中:其中:协议名(协议名(protocolprotocol):指明获取资源所使用的传输协议,指明获取资源所使用的传输协议,如如httphttp、ftpftp、gophergopher、filefile等。等。Host_nameHost_name:资源名(:资源名(resourceNameresourceName)所在的主机。)所在的主机。Port_nubmerPort_nubmer:连接时所使用的通信端口号:连接时所使用的通信端口号 File_nameFile_name:该资源在主机的完整文件名。:该资源在主机的完整文件名。HTTP概述概述例例1:http:/

3、 3基于基于TCP/IP编程的两个协议编程的两个协议 目前在Internet上使用最为广泛的协议是TCP/IP协议 1)TCP 是一种面向连接的保证可靠传输的协议。通过是一种面向连接的保证可靠传输的协议。通过TCP协议协议传输,得到的是一个顺序的无差错的数据流。传输,得到的是一个顺序的无差错的数据流。发送方和接收方在进行数据传输前必须进行连接(成对的两发送方和接收方在进行数据传输前必须进行连接(成对的两个个socket之间必须建立连接)。之间必须建立连接)。HTTP概述概述2)UDP UDP是是User Datagram Protocol的简称,是一种无连接的协议,的简称,是一种无连接的协议,

4、每个数据报都是一个独立的信息,包括完整的源地址或目的地每个数据报都是一个独立的信息,包括完整的源地址或目的地址。址。它在网络上以任何可能的路径传往目的地,因此能否到达目的它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。地,到达目的地的时间以及内容的正确性都是不能被保证的。HTTP概述概述在在JavaJava语言中,可以使用三种方式实现网络编语言中,可以使用三种方式实现网络编程:程:(1 1)URLURL编程(获取编程(获取URLURL属性信息)属性信息)(2 2)SocketSocket编程(基于编程(基于TCP TCP 的的C/SC

5、/S)(3)Datagram(3)Datagram编程(编程(UDPUDP)HTTP概述概述包 -URL类 -URLconnection类 -Socket类 -ServerSocket类 -DatagramPacket类 -DatagramSocket类 -MulticastSocket类TCPTCP实现实现网络通信网络通信UDP实现实现网络通信网络通信HTTP概述概述URL本节主要内容:本节主要内容:URLURL构造方法构造方法URLURL类的其他方法类的其他方法URLURL相关的异常相关的异常从从URLURL读取读取WWWWWW网络数据网络数据 1 1)public URL(String

6、spec);public URL(String spec);使用使用URLURL对象的字符串对象的字符串specspec来构造一个来构造一个URLURL对象。对象。例例1 1:URL url=new URL(http:/www.URL url=new URL(http:/)构造方法构造方法2)public URL(URL baseurl,String spec);通过基地址通过基地址URL和表示相对路径的字符串构和表示相对路径的字符串构造一个造一个URL对象。对象。例例2:URL net263=new URL(http:/ index263=new URL(net263,index.html)

7、基地址基地址构造方法构造方法3)public URL(String protocol,String host,String file);通过协议名、主机名和文件名构造一个通过协议名、主机名和文件名构造一个URL对象。对象。例例3:URL u1=new URL(http,/pages/G.html);构造方法构造方法4)public URL(String protocol,String host,int port,String file);通过协议名、主机名、端口号和文件名构造一个通过协议名、主机名、端口号和文件名构造一个URL对象。对象。例例4:URL g1=new URL(http,“,80

8、,“07/1208/16/3v2007j.html);构造方法构造方法URL类的其他方法类的其他方法获取获取URL对象属性的方法对象属性的方法:public String getProtocol():获取该获取该URL的协议名的协议名 public String getHost():获取该获取该URL的主机名的主机名 public String getPort():获取该获取该URL的端口号的端口号 public String getPath():获取该获取该URL的文件路径的文件路径 public String getFile():获取该获取该URL的文件名的文件名 public Strin

9、g getRef():获取该获取该URL在文件中的相对位置在文件中的相对位置 public String getQuery():获取该获取该URL的查询名的查询名也可使用下列方法将也可使用下列方法将URLURL对象的内容以字符串对象的内容以字符串的形式来表示:的形式来表示:String toString();String toString();String toExternalForm();String toExternalForm();URL类的其他方法类的其他方法与与URL相关的异常相关的异常 URL URL类的每个构造方法在类的每个构造方法在URLURL地址残缺或无法地址残缺或无法解释时

10、,都将抛出解释时,都将抛出MalformedURLExceptionMalformedURLException异常。异常。一般将相关语句放入一般将相关语句放入trycatchtrycatch语句块中。格语句块中。格式如下:式如下:try URL myURL=new URL()catch(MalformedURLException e)/exception handler code here URLURL编程步骤:编程步骤:1 1)导入)导入包;包;2 2)创建)创建URLURL对象(对象(URLURL构造方法)构造方法)3 3)获取)获取URLURL对象属性对象属性 或利用或利用URLURL对

11、象读入数据对象读入数据 例例5:URL url1,url2,url3;try url1=new URL(“file:/D:/image/example.gif”);url2=new URL(“http:/ URL(url2,“test.gif”);catch(MalformedURLException e)DisplayErrorMessage();.例例6 6:获取:获取URLURL对象属性对象属性try /创建创建URL对象对象URL ur1=new URL(http:/ e)System.out.println(错误的错误的URL对象。对象。);获取获取URLURL对象属性的运行结果对象

12、属性的运行结果从从URL读取读取WWW网络数据网络数据 URL URL类定义了类定义了openStream()openStream()方法用以读取方法用以读取URLURL地址的数据,其定义为地址的数据,其定义为:public final InputStream openStream()public final InputStream openStream()thorws IOException thorws IOException;URLJava 程序程序InputStream例例7:从:从URL中读取数据中读取数据 URL google=new URL(“http:/);BufferedRe

13、ader in=new BufferedReader(new InputStreamReader(google.openStream();String inputLine;while(inputLine=in.readLine()!=null)System.out.println(inputLine);in.close();.从从URLURL中读取数据的运行结果中读取数据的运行结果基于基于URLConnection的读写的读写1.1.URLConnectionURLConnection类类 URLURL的方法的方法openStream()openStream()只能从网络上只能从网络上读取数据

14、,而不能写。读取数据,而不能写。URLConnectionURLConnection是封装访问远程网络资是封装访问远程网络资源一般方法类,通过它可以建立与远程服务源一般方法类,通过它可以建立与远程服务器的连接,检查远程资源的一些属性。器的连接,检查远程资源的一些属性。URL类中的方法类中的方法openConnection()可以对可以对URL指向的网络资源进行指向的网络资源进行读写。读写。public URLConnetion openConnection();作用:尝试连接作用:尝试连接URL指向的网络资源,然后返回封装了操作该连接指向的网络资源,然后返回封装了操作该连接的类的类.URLCo

15、nnection的一个实例。的一个实例。基于基于URLConnection的读写的读写例例8:try /先创建一个先创建一个URL对象对象url1 URL url1=new URL(http:/);/创建到创建到url1的一个连接对象的一个连接对象con URLConnection con=url1.openConnection();catch(MalformedURLException)catch(IOException)2URLConnetion类中的常用方法类中的常用方法 public InputStream getInputStream();public OutputStream ge

16、tOutputStrem();public URl getURL();基于基于URLConnection的读写的读写3.URLConnection读读/写编程步骤写编程步骤 1)创建一个)创建一个URL对象对象u1;2)使用)使用URLConnection类中的类中的openConnection()方法方法创建到创建到URL的一个连接对象的一个连接对象:URLConnection u1.openConnection()成功,返回一个成功,返回一个URLConnection对象对象不成功,抛出不成功,抛出IOException异常异常 3)进行数据的读或写操作)进行数据的读或写操作;4)关闭流关

17、闭流基于基于URLConnection的读写的读写 4从URLConnection读URL资源URLConnectionURLConnection类的读写渠道类的读写渠道 getInputStream()getInputStream()基于基于URLConnection的读写的读写例例9:采用:采用URLConection 从从URL读取数据读取数据 String inputLine;System.out.println(gl.getContentLength();System.out.println(gl.getDate();System.out.println(gl.getLastModi

18、fied();System.out.println(gl.getURL();System.out.println(gl.toString();基于基于URLConnection的读写的读写URL google=new URL(http:/localhost:8080/examples/jsp/datatreat.jsp);BufferedReader in=new BufferedReader(new InputStreamReader(google.openStream();String inputLine;while(inputLine=in.readLine()!=null)System

19、.out.println(inputLine);in.close();基于基于URLConnection的读写的读写从从URLConectionURLConection读取数据的运行结果读取数据的运行结果CGICGI程序程序POSTPOST信息信息有动态特性的有动态特性的HTMLHTML网页网页标准输入标准输入标准输出标准输出4.4.对对RLConnectionRLConnection写写setDoOutput(true),getOutputStream()什么情况下有必要向什么情况下有必要向URLURL写信息呢?写信息呢?-表单(表单(Form)Form)与与CGICGI有交互的网页有交互的

20、网页 -使用使用POSTPOST方式向方式向CGICGI传送信息传送信息 基于基于URLConnection的读写的读写例例10:向一个:向一个RLConnection写写 URL url=new URL(http:/);URLConnection connection=url.openConnection();connection.setDoOutput(true);PrintWriter out=new PrintWriter (connection.getOutputStream();out.println(string);out.close();InetAddres类类 类.InetA

21、ddress表示一个 Internet Protocol(IP)地址。应用程序必须使用方法 getLocalHost,getByName,或 getAllByName 来创建新的 InetAddress 实例。例11:InetAddress ia=new InetAddress();其他方法其他方法 1)public byte getAddress()返回这个返回这个 InetAddress 对象的原始对象的原始 IP 地址。地址。2)public static InetAddress getAllByName(String)throws UnknownHostException 给定主机名,

22、确定该主机的所有给定主机名,确定该主机的所有 IP 地址。地址。3)public static InetAddress getByName(String host)throws UnknownHostException 给定主机名,确定该主机的所有给定主机名,确定该主机的所有 IP 地址。地址。4)public String getHostAddress()返回返回IP 地址串地址串%d.%d.%d.%dInetAddres类类 5)public String getHostName()返回此地址的全限定主机名。返回此地址的全限定主机名。6)public static InetAddress

23、getLocalHost()返回本地主机。返回本地主机。7)public String toString()把此把此IP 地址转换为地址转换为 String 类型。类型。上述上述1)-4)方法均要抛出方法均要抛出UnknownHostException 异常。异常。InetAddres类类例例12:InetAddress 获取获取 IP地址地址import .*;public class getip public static void main(String args)throws UnknownHostException InetAddress ad=InetAddress.getByNa

24、me(localhost);System.out.println(主机名:主机名:+ad.getHostName();System.out.println(主机地址:主机地址:+ad.getHostAddress();System.out.println(ad.getCanonicalHostName();System.out.println(本地地址:本地地址:+ad.getAddress();System.out.println(本地主机名:本地主机名:+ad.getLocalHost();netAddress类获取IP地址 socketSocketSocket是网络程序中最常用的方式,用

25、是网络程序中最常用的方式,用于建立两个不同程序之间通过网络进行通于建立两个不同程序之间通过网络进行通信的信道。信的信道。JavaJava语言提供了两种语言提供了两种SocketSocket通信方式:通信方式:TCP SocketTCP SocketUDP SocketUDP Socket网络服务网络服务Mailftpfinger20telnet数据结构数据结构I/O缓冲区缓冲区端口端口2123客户程序客户程序SocketIP,port套接字是套接字是IP与端口的组与端口的组合合,可以分辨在可以分辨在internet上运行的程序上运行的程序socket通信一般过程通信一般过程 Socket So

26、cket通常用来实现客户通常用来实现客户/服务器程序。服务器程序。为了让客户机知道如何与相应的服务进程建为了让客户机知道如何与相应的服务进程建立通信联系,一般系统为一些常用的服务类立通信联系,一般系统为一些常用的服务类型分配了默认端口号:型分配了默认端口号:表表1 1 常用服务端口号常用服务端口号 服务类型服务类型 端口号端口号 EchoEcho FTPFTP TELNETTELNET SMTPSMTP FingerFinger HTTPHTTP POP3POP3 7 7 2121 2323 2525 7979 8080 110110 Socket Socket进行进行C/SC/S程序设计的一

27、般连接过程序设计的一般连接过程:程:ServerServer端监听某个端口是否有连接请端监听某个端口是否有连接请求;求;ClientClient端向端向ServerServer端发出连接请求;端发出连接请求;ServerServer端向端向ClientClient端发回端发回accpetaccpet消息。消息。这样一个连接就建立起来,这样一个连接就建立起来,ServerServer端和端和ClientClient端都可以通过端都可以通过sendsend、writewrite等方法与等方法与对方通信。对方通信。socket通信一般过程通信一般过程 ServerServerSocket(port#

28、)Socket socket=ServerSocket.accept()接收连接接收连接OutputStreamInputStreamClose SocketClientSocket(host,port#)与服务器建立连接与服务器建立连接OutputStreamInputStreamClose Socketsocket TCP TCP协议协议 SocketSocket通信通信socket通信一般过程通信一般过程 例例13:13:显示服务器与客户机间的通信显示服务器与客户机间的通信(服务器端服务器端)PrintStream ps=null;DataInputStream dis=null;Str

29、ing 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);创建服务器创建服务器(端口号端口号

30、)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接 SocketSocket编程步骤编程步骤 应用应用SocketSocket进行网络编程,基本结构都是包括进行网络编程,基本结构都是包括下面下面4 4个步骤:个步骤:(1 1)创建创建SocketSocket;(2 2)打开连接到打开连接到SocketSocket的输入的输入/出流;出流;(3 3)按照一定的协议对按照一定的协议对SocketSocket进行读进行读/写操写操作;作;(4 4)关闭关闭SocketSocket。socket通信一般过程通信一般过程 .socket java在包在包中提供了中提供了Socket类,表示客

31、户类,表示客户端创建对象来建立与服务器的连接。端创建对象来建立与服务器的连接。1.socket构造方法构造方法 Socket(InetAddress address,int port);Socket(String host,int port);Socket(String host,int port,InetAddress localAddr,int localPort);Socket(InetAddress address,int port,InetAddress localaddr,int localPort);例例14:Socket client=new Socket(127.0.01.,

32、80);Socket cc=new Socket(“”,80);2.读读/写方法写方法 1)public InputStream getInputStream()throws IOException 功能:从功能:从 Socket 中获得一个输入流,用于从中获得一个输入流,用于从 Socket 中读数据,抛出中读数据,抛出 I/O 异常。异常。2)public OutputStream getOutputStream()throws IOException 功能:从功能:从 Socket 中获得一个输出流,用于从中获得一个输出流,用于从 Socket 中写数据,抛出中写数据,抛出 I/O 异常

33、。异常。3)public void close();关闭流关闭流3基于基于TCP协议的的客户端编程步骤协议的的客户端编程步骤 1)创建一个指向一个服务器固定端口的)创建一个指向一个服务器固定端口的Socket。例例15:Socket sock=new Socket(“192.168.12.67”,8000);2)获得输入获得输入/输出流,进行数据的读输出流,进行数据的读/写操作。写操作。例例16:/获取输入流获取输入流 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream();/获取输出

34、流获取输出流 PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter (socket.getOutputStream(),Java 语言为服务器端程序设计提供了 ServerSocket 类。该类允许程序绑定一个端口,等待客户端程序请求,然后根据客户端的请求执行相应操作,并对请求作出响应。.ServerSocket1.ServerSocket的构造方法的构造方法 ServerSocket(int port);ServerSocket(int port,int backlog);ServerSocket(

35、int port,int backlog,InetAddress bindAddr);例例17:ServerSocket server=new ServerSocket(4460);ServerSocket sr=new ServerSocket(4460,10);.ServerSocket2 2监听方法监听方法 public Socket accept()public Socket accept();功能:功能:等待客户端的连接等待客户端的连接,在等待客户请求在等待客户请求的过程中,方法的过程中,方法 accept()accept()将处于阻塞状将处于阻塞状态(即无限循环状态),直到接收到连

36、态(即无限循环状态),直到接收到连接请求,返回一个用于连接客户端接请求,返回一个用于连接客户端 Socket Socket 的的 Socket Socket 实例。实例。.ServerSocket例例18:ServerSocket server=null;try server=new ServerSocket(4700);/创建一个创建一个ServerSocket在端口在端口4700监听客户请求监听客户请求catch(IOException e)System.out.println(can not listen to:+e);Socket socket=null;try socket=serv

37、er.accept();/监听监听catch(IOException e)System.out.println(Error:+e);3基于基于Socket编程服务器端编程步骤编程服务器端编程步骤 1)以某端口号为参数调用)以某端口号为参数调用ServerSocket类类的构造方法,创建一个的构造方法,创建一个ServerSocket对象,服务对象,服务器端程序将在这个端口上监听、等待客户程序发器端程序将在这个端口上监听、等待客户程序发来的请求。如上例。来的请求。如上例。.ServerSocket2服务程序使用服务程序使用ServerSocket对象的方法对象的方法accept(),等待接收某,

38、等待接收某客户端程序发出的连接请求。客户端程序发出的连接请求。例例19:Socket soc=server.accept();通过通过Socket对象可获取客户端的相关信息。对象可获取客户端的相关信息。例例20:clientIp=soc.getInetAddress();也可以利用也可以利用Socket类提供的方法类提供的方法 getInputStream()和和getOutputStream()来创建输入来创建输入/输出流。输出流。例例21:InputStream is=soc.getInputStream();OutputStream os=soc.getOutputStream();3输

39、入输入/输出输出 程序对程序对socket的输入的输入/输出流进行读输出流进行读/写操作都和对写操作都和对普通的输入普通的输入/输出流进行读输出流进行读/写基本一样。但是需要在这写基本一样。但是需要在这两个流对象的基础上建立易于操作的数据流如两个流对象的基础上建立易于操作的数据流如DataInputStream、DataOutputStream或或PrintStream。例例22:DataInputStream in=new DataInputStream(is);DataOutputStream out=new DataOutputStream(os);PrintStream pout=ne

40、w PrintStream(os);另外为了便于输出字符或汉字,可以使用下列输出另外为了便于输出字符或汉字,可以使用下列输出/输入输入流:流:BufferedReader in=new BufferedReader(new InputStreamReader(is);BufferedWriter out=new BufferedWriter(new OutputStremWriter(os);PrintWriter pout=new PrintWriter(new BufferedWriter(new OutputStreamWriter(os),true);Socket应用应用 例例23:基

41、于连接的:基于连接的Client/Server程序程序1.Client端程序端程序import .*;import java.io.*;public class JabberClient public static void main(String args)throws IOException InetAddress addr=InetAddress.getByName(null);System.out.println(addr=+addr);BufferedReader fin=new BufferedReader(new InputStreamReader(System.in);Sock

42、et socket=new Socket(addr,8080);try System.out.println(socket=+socket);BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true);Socket应用应用 while(true)String str=fin.read

43、Line();if(str.equals(exit)out.println(exit);break;else out.println(str);String s=in.readLine();System.out.println(server response:+s);Socket应用应用/关闭连接关闭连接 finally System.out.println(closing.);socket.close();Socket应用应用 2.2.服务器端程序服务器端程序public class JabberServer public static void main(String args)throw

44、s IOException ServerSocket s=new ServerSocket(8080);Socket socket;System.out.println(Started:+s);try socket=s.accept();try System.out.println(Connection accepted:+socket);BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter out=new PrintWriter(new BufferedWr

45、iter(new OutputStreamWriter(socket.getOutputStream(),true);2.2.服务器端程序服务器端程序while(true)String str=in.readLine();if(str.equals(exit)break;System.out.println(Echoing:+str);out.println(server received+str);finally System.out.println(closing.);socket.close();finally s.close();2.2.服务器端程序服务器端程序客户/服务器通信例24:

46、多线程服务实现 基本方法:基本方法:在服务器程序里创建单个在服务器程序里创建单个ServerSocketServerSocket对象,并调用对象,并调用accept()accept()方法来等候一个新连接。一旦调用方法来等候一个新连接。一旦调用accept()accept()方法成方法成功,就会获得一个功,就会获得一个socketsocket对象,并用它新建一个线程,令其对象,并用它新建一个线程,令其只为那个特定的客户服务。然后再调用只为那个特定的客户服务。然后再调用acceptaccept方法,等候下方法,等候下一个新的连接请求。一个新的连接请求。多线程服务器程序:多线程服务器程序:impo

47、rt java.io.*;import .*;public class MultiTalkServer /静态成员变量,记录当前客户的个数静态成员变量,记录当前客户的个数 static int clientnum=0;public static void main(String args)throws IOException ServerSocket serverSocket=null;boolean listening=true;try serverSocket=new ServerSocket(4700);/创建一个创建一个ServerSocket在端口在端口4700监听客户请求监听客户请

48、求catch(IOException e)System.out.println(Could not listen on port:4700.);/出错,打印出错信息出错,打印出错信息 System.exit(-1);/退出退出 while(listening)/永远循环监听永远循环监听 new ServerThread(serverSocket.accept(),clientnum).start();/监听到客户请求,根据得到的监听到客户请求,根据得到的Socket对象和客户计数创建服务线对象和客户计数创建服务线程,并启动之程,并启动之clientnum+;/增加客户计数增加客户计数serve

49、rSocket.close();/关闭关闭ServerSocket线程程序:public class ServerThread extends Thread Socket socket=null;/保存与本线程相关的保存与本线程相关的Socket对象对象 int clientnum;/保存本进程的客户计数保存本进程的客户计数 public ServerThread(Socket socket,int num)/构造函数构造函数 this.socket=socket;/初始化初始化socket变量变量 clientnum=num+1;/初始化初始化clientnum变量变量 public void run()/线程主体线程主体try String line;BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream();/由由Socket对象得到输入流,并构造相应的对象得到输入流,并构造相应的BufferedReader对象对象 PrintWriter os=new PrintWriter(socket.getOutputStream();/由由Socket对象得到输出流,并构造对象得到输出流,并构造PrintWriter对象对象 BufferedReader sin=new B

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(java(教学0)java网络编程课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|