第八章-网络与数据通信技术总结.ppt

上传人:得****1 文档编号:76366176 上传时间:2023-03-09 格式:PPT 页数:59 大小:4.24MB
返回 下载 相关 举报
第八章-网络与数据通信技术总结.ppt_第1页
第1页 / 共59页
第八章-网络与数据通信技术总结.ppt_第2页
第2页 / 共59页
点击查看更多>>
资源描述

《第八章-网络与数据通信技术总结.ppt》由会员分享,可在线阅读,更多相关《第八章-网络与数据通信技术总结.ppt(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第八章 网络与数据通信技术俞成海俞成海教学任务与目标教学任务USB编程Wi-Fi编程蓝牙编程Socket实现技术HTTP协议通信实现技术教学重点蓝牙编程Socket实现技术USB 编程两种模式来支持AndroidUSB外设:USB外设模式和USB主机模式在USB外设模式下,外部USB硬件(装有Android的设备要连接的外部设备)充当USB主机。外设的例子包括机器人、扩展插座、诊断和音乐设备、电子报亭、读卡器等其他设备,这种模式给予不具备主机功能的Android设备以与USB硬件交互的能力。在USB主机模式下,装有Android的设备扮演着主机的角色。这种设备的例子包括数码像机,键盘,鼠标和游

2、戏手柄。那些适应面很广的USB设备仍可以与Android应用交互,前提是这些Android应用可以正确的与这些设备通讯。http:/ USB主机模式常用的类:UsbManager:允许您枚举已连接的USB设备并且与其进行“交流”。UsbDevice:代表了一个已连接的USB的设备并且包含具有该设备验证信息,接口和接口点的方法。UsbInterface:代表了一个USB设备的一个接口,该接口定义了一系列关于设备的函数。一个设备在进行“交流”的时候可以有一个或者多个接口UsbEndpoint:代表一个接口的接口点,该接口点就是这个接口的通信信道。一个接口可以有一个或者多个这样的接口点,而且一般都是

3、有输入和输出双向通信的接口点。UsbDeviceConnection:代表该设备的一个连接,用来在接点上传输数据。这个类允许您能用同步或者异步的方式发送和返回数据。UsbRequest:在通过UsbDeviceConnection和设备进行“交流”的一个异步请求。UsbConstants:关于在linux内核中linux/usb/ch9.h的相关定义的USB常量使用步骤(见附件)为了让应用可以发现一个USB设备,需要android.hardware.usb.action.USB_DEVICE_ATTACHED这个意图指定一个意图来进行过滤获取USB信息UsbManagermanager=(Us

4、bManager)getSystemService(Context.USB_SERVICE);HashMapdeviceList=manager.getDeviceList();UsbDevicedevice=deviceList.get(deviceName);和设备通信和设备通信UsbInterfaceintf=device.getInterface(0);UsbEndpointendpoint=intf.getEndpoint(0);UsbDeviceConnectionconnection=manager.openDevice(device);connection.claimInter

5、face(intf,true);connection.bulkTransfer(endpoint,bytes,bytes.length,0);终止通信终止通信当你完成数据的传输或者你的设备已拔出时,通过调用releaseInterface()和close()来关闭接口和连接。Wi-Fi 编程ConnectivityManagerNetworkInfo mWiFiNetworkInfo=mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)所需要用到的wifi相关Android包:.wifi常见操作主要包括以下及各类和

6、接口:1、WifiManager 提供了管理WiFi连接的大部分API,主要包括如下内容:查看已经配置好的网络清单,而且可以修改个别记录的属性。可以建立或是关闭WiFi网络连接,并且可以查询有关网络状态的动态信息。对接入点的扫描结果包含足够的信息来决定需要与什么接入点建立连接。同时还定义了许多常量来表示WiFi状态的改变。常用的方法:getWiFiState,isWifiEnabled,setWifiEnabled,startScan,getScanResults等等基于Android的WiFi相关库函数WiFi相关库函数所需要用到的所需要用到的wifi相关相关Android包:包:.wifi

7、常见操作主要包括以下及各类和接口:常见操作主要包括以下及各类和接口:2、WifiConfigurationWiFi网络的配置,包括安全配置等。网络的配置,包括安全配置等。3.WifiInfoWiFi无线连接的描述,包括接入点、网络连接状态、隐藏的接无线连接的描述,包括接入点、网络连接状态、隐藏的接入点,入点,ip地址、连接速度、地址、连接速度、mac地址、网络地址、网络id,信号强度等信信号强度等信息。息。4.ScanResult主要用来描述已经检测出的接入点,包括接入点的地址、接入主要用来描述已经检测出的接入点,包括接入点的地址、接入点的名称、身份认证、频率、信号强度等信息。点的名称、身份认

8、证、频率、信号强度等信息。找到周围AP的关键步骤检测网卡状态,修改网卡状态检测网卡状态,修改网卡状态开启,进行扫描周围开启,进行扫描周围ap,打印结果打印结果class ListWifiListerner implements OnClickListenerOverride public void onClick(View v)wifiManager=(WifiManager)WifiActivity.this.getSystemService(Context.WIFI_SERVICE);wifiManager.startScan();mWifiList=wifiManager.getScan

9、Results();for(int i=0;imWifiList.size();i+)sb.append(new Integer(i).toString()+.);sb.append(mWifiList.get(i).toString();sb.append(n);mainText.setText(sb);sb.delete(0,sb.capacity();蓝牙编程,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设置、搜索设备、连接、传输数据BluetoothAdapter代表本地蓝牙适配器(蓝牙发射器),是所有蓝牙交互的入。通过它可以搜索其它蓝牙设备,查询已经配对的设备列表,通过已知的MAC地

10、址创建BluetoothDevice,创建BluetoothServerSocket监听来自其它设备的通信。BluetoothDevice代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态。BluetoothSocket代表了一个蓝牙套接字的接,是应用程序通过输、输出流与其他蓝牙设备通信的连接点。BluetoothServerSocket代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。BluetoothClass描述了一个设备的特性(profile)或该设备上的蓝牙

11、一致可以提供哪些服务(service),但不可信。比如,设备是一个电话、计算机或手持设备;设备可以提供audio/telephony服务等。可以用它来进行一些UI上的提示。BluetoothHeadset提供手机使用蓝牙耳机的支持。这既包括蓝牙耳机和免提(V1.5)模式。BluetoothA2dp定义高品质的音频,可以从一个设备传输到另一个蓝牙连接。“A2DP的”代表高级音频分配模式。BluetoothHealth代表了医疗设备配置代理控制的蓝牙服务BluetoothHealthCallback一个抽象类,使用实现BluetoothHealth回调。你必须扩展这个类并实现回调方法接收更新应用程

12、序的注册状态和蓝牙通道状态的变化。BluetoothHealthAppConfiguration代表一个应用程序的配置,蓝牙医疗第三方应用注册与远程蓝牙医疗设备交流。BluetoothProfile.ServiceListener当他们已经连接到或从服务断开时通知BluetoothProfileIPX的客户时一个接(即运行一个特定的配置文件,内部服务)。BlueTooth使用至少要在AndroidManifest.xml中声明两个权限:BLUETOOTH和BLUETOOTH_ADMIN获取BluetoothAdapter打开蓝牙:通过isEnabled()来检查蓝牙当前是否可用。如果这个方法返

13、回false,则蓝牙不能够使用。为了请求蓝牙使用,呼叫startActivityForResult()与的ACTION_REQUEST_ENABLE动作意图获取BluetoothAdapter查找匹配设备扫描设备开始搜索设备,调用开始搜索设备,调用startDiscovery()。该函数是异步的,调用后立即返回,。该函数是异步的,调用后立即返回,返回值表示搜索是否成功开始。返回值表示搜索是否成功开始。应用中可以注册一个带应用中可以注册一个带ACTION_FOUND Intent的的BroadcastReceiver,搜,搜索到每一个设备时都接收到消息。索到每一个设备时都接收到消息。Intent

14、携带着而外的字段信息携带着而外的字段信息EXTRA_DEVICE和和EXTRA_CLASS,分别包含一个,分别包含一个BluetoothDevice和一和一个个BluetoothClass。使用使用cancelDiscovery()来停止搜索来停止搜索使能被发现如果想让本地设备被其他设备发现,可以带ACTION_REQUEST_DISCOVERABLEactionIntent调用startActivityForResult(Intent,int)方法作为服务器连接通过持有通过持有个打开的个打开的BluetoothServerSocket对对象。服务器象。服务器socket的作用是侦听进来的连接

15、,如的作用是侦听进来的连接,如果一个连接被接受,提供一个连接好的果一个连接被接受,提供一个连接好的BluetoothSocket对象。对象。建立服务器socket和接收一个连接的基本步骤1.通过调用listenUsingRfcommWithServiceRecord(String,UUID)得到一个BluetoothServerSocket对象,当客户端试图连接本设备,它将携带一个UUID用来唯一标识它要连接的服务,UUID必须匹配,连接才会被接受。2.通过调用accept()来侦听连接请求。这是一个阻塞的调用,直到有连接进来或者产生异常才会返回。只有远程设备发送一个连接请求,并且携带的UUI

16、D与侦听它socket注册的UUID匹配,连接请求才会被接受。如果成功,accept()将返回一个连接好的BluetoothSocket对象。3.除非需要再接收另外的连接,否则的话调用close()。close()释放serversocket和它的资源,但不会关闭连接accept()返回的连接好的BluetoothSocket对象。作为客户端连接1.用BluetoothDevice调用createRfcommSocketToServiceRecord(UUID)获取一个BluetoothSocket对象。这个初始化的BluetoothSocket会连接到BluetoothDevice。2.调用

17、connect()完成连接当调用这个方法的时候,系统会在远程设备上完成一个SDP查找来匹配UUID。如果查找成功并且远程设备接受连接,就共享RFCOMM信道,connect()会返回。这也是一个阻塞的调用,不管连接失败还是超时(12秒)都会抛出异常。管理连接如果已经连接了两个设备,他们都已经拥有各自的连接好的BluetoothSocket对象。可以在设备间共享数据了。使用BluetoothSocket,传输任何数据通常来说都很容易了:1.通过socket获取输入输出流来处理传输(分别使用getInputStream()和getOutputStream())。2.用read(byte)和writ

18、e(byte)来实现读写。基于Socket网络编程Socket网络通信的组成元素服务器,主要功能:侦听连接、接收连接、接收数据和向客户端发送数据。客户端,主要功能:发起连接、接收数据和向服务器发送数据Socket网络通信的基本原理IP地址:主机标识端 口:服务类型Socket =IP(address)+Port(server)Java-Internet语言语言具备强大网络通信功能具备强大网络通信功能基于套接字(Socket)通信方式流套接字TCP协议协议(Transmission Control Protocol)UDP协议协议(User Datagram Protocol)数据报套接字基于S

19、ocket网络通信方式主要使用类 Java的的Socket属于流式套接字通信,采用属于流式套接字通信,采用TCP协议,提协议,提供面向连接的服务,实现可靠的通信。供面向连接的服务,实现可靠的通信。J提供两个类,实现Socke通信:ServerSocket-服务器端Socket-客户端通 操作TCP 套接字的发送和接收需要借助java.io包的 InputStream /OutputStream 完成,分别通过方法实现:Socket.getInputStream()/Socket.getOutputStream()Socket/ServerSocket构造函数Socket()通过系统默认类型的通

20、过系统默认类型的 SocketImpl 创建未连接套接字创建未连接套接字 Socket(InetAddressaddress,intport)创建一个流套接字并将其连接到指定创建一个流套接字并将其连接到指定 IP 地址的指定端口号地址的指定端口号Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)创建一个套接字并将其连接到指定远程端口上的指定远程地址创建一个套接字并将其连接到指定远程端口上的指定远程地址 Socket(Stringhost,intport)创建一个流套接字并将其连接到指定主机上的指定端口号创建一

21、个流套接字并将其连接到指定主机上的指定端口号Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)创建一个套接字并将其连接到指定远程主机上的指定远程端口创建一个套接字并将其连接到指定远程主机上的指定远程端口ServerSocket()创建非绑定服务器套接字ServerSocket(int port)创建绑定到特定端口的服务器套接字ServerSocket(int port,int backlog)利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号ServerSocket(int port,int backlog

22、,InetAddress bindAddr)使用指定的端口、侦听backlog和要绑定到的本地IP地址创建服务器Socket/ServerSocket主要方法InetAddressgetInetAddress()返回套接字连接的地址返回套接字连接的地址InputStreamgetInputStream()返回此套接字的输入流返回此套接字的输入流InetAddressgetLocalAddress()获取套接字绑定的本地地址获取套接字绑定的本地地址intgetLocalPort()返回此套接字绑定到的本地端口返回此套接字绑定到的本地端口OutputStreamgetOutputStream()返

23、回此套接字的输出流返回此套接字的输出流intgetPort()返回此套接字连接到的远程端口返回此套接字连接到的远程端口voidclose()关闭此套接字关闭此套接字Socketaccept()服务器侦听并接受到此套接字的连接服务器侦听并接受到此套接字的连接voidclose()关闭此套接字关闭此套接字Socke通信机制OutputStream获得获得Socket对象输出流对象输出流建立Socket连接通过流传输数据服务端联结成功联结成功获得已连接的获得已连接的Socket对象对象Socket(host,portSocket(host,port)创建创建Socket对象对象向指定主机端口发出连接

24、请求向指定主机端口发出连接请求客户端Socket对象ServerSocket对象InputStream获得获得Socket对象输入流对象输入流申请连接ServiceSocket.close()停止提供停止提供TCP连接服务连接服务一个一个ServerSocket对象和一个对象和一个Socket对象对象一个一个Socket对象对象Socket.close()关闭关闭TCP连接连接ServerSocket(port)创建创建ServiceSocke对象对象,提供提供TCP连接服务连接服务accept()在指定的端口监听客户端请求联结创建在指定的端口监听客户端请求联结创建InputStream获得获

25、得Socket对象输入流对象输入流Socket.close()关闭关闭TCP连接连接OutputStream获得获得Socket对象输出流对象输出流ServerSocket对象访问监听Socke通信机制Server端Client端service=ServerSocket(port_number)创建service对象,以TCP服务实现端口监听socket=ServerSocket.accept()创建socke对象,接收用户访问请求Socket=Socket(port_number)创建socke对象,建立连接,发送访问请求InputStream Socket对象输入流OutputStream

26、 Socket对象输出流通过socke对象实现与Client端数据传输OutputStream Socket对象输出流InputStream Socket对象输入流通过socke对象,实现与Servert端数据传输socket.close()关闭Socke关闭结束与Client端的连接service.close()关闭监听程序socket.close()关闭Socke结束与Server端的连接(1)建立连接(2)数据通讯(3)拆除连接客户端开启INTERNET布局界面(Main.xml)获取资源(EditText,Button,TextView)Socket通信数据读写(DataInputSt

27、ream/DataOutputStream)客户端主要代码:public void onClick(View v)Socket s=null;DataOutputStream dout=null;DataInputStream din=null;if(v=button1)/点击的是按钮try s=new Socket(192.168.9.102,8888);/连接服务器dout=new DataOutputStream(s.getOutputStream();/得到输出流 din=new DataInputStream(s.getInputStream();/得到输入流dout.writeUT

28、F(editText.getText().toString();/向服务器发送消息textView.setText(服务器发来的消息:+din.readUTF();/接收服务器发来的消息 catch(Exception e)e.printStackTrace();/打印异常信息 finally tryif(dout!=null)dout.close();/关闭输入流if(din!=null)din.close();/关闭输入流if(s!=null)s.close();/关闭Socket连接catch(Exception e)e.printStackTrace();/打印异常信息服务器(例子)S

29、erverSocketAcceptDataInputStream/DataOutputStreamRead/Write服务器端主要代码:ServerSocket ss=null;/ServerSocket的引用Socket s=null;/Socket的引用DataInputStream din=null;DataOutputStream dout=null;tryss=new ServerSocket(8888);/监听到8888端口System.out.println(已监听到8888端口!);catch(Exception e)e.printStackTrace();/打印异常信息whi

30、le(true)trys=ss.accept();/等待客户端连接din=new DataInputStream(s.getInputStream();dout=new DataOutputStream(s.getOutputStream();/得到输入输出流String msg=din.readUTF();/读一个字符串System.out.println(ip:+s.getInetAddress();/打印客户端IPSystem.out.println(msg:+msg);/打印客户端发来的消息System.out.println(=);dout.writeUTF(Hello Client

31、!);/向客户端发送消息catch(Exception e)e.printStackTrace();/打印异常信息基于HTTP协议的网络编程统一资源定位器URL:URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。URL的组成protocol:/resourceName协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gropher、file等,资源

32、名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:http:/ 协议名:/机器名文件名http:/:80/Gamelan/network.html#BOTTOM 协议名:/机器名端口号文件名内部引用.创建一个创建一个URL为了表示URL,中实现了类URL。我们可以通过下面的构造方法来初始化一个URL对象:(1)public URL(String spec);(2)public URL(URL context,String spec);(3)public URL(String protocol,String host,String fil

33、e);(4)public URL(String protocol,String host,int port,String file);解析一个解析一个URL一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性 从从URL读取读取WWW网络资源网络资源当我们得到一个URL对象后,就可以通过它读取指定的WWW资源。通过通过HttpURLConnetction连接连接WWW 通过URL的方法openStream(),我们只能从网络上读取数据,如果我们同时还想输出数据,例如向服务器端的CGI程序发送一些数据,我们必须先与URL建立连接,然后才能对其进行读写,这

34、时就要用到类URLConnection了。CGI是公共网关接口(Common Gateway Interface)的简称,它是用户浏览器和服务器端的应用程序进行连接的接口,有关CGI程序设计,请读者参考有关书籍。类HttpURLConnetction也在包中定义,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的HttpURLConnetction对象。如果连接过程失败,将产生IOException.HttpURLConnection ucon=null;BufferedReader reader=

35、null;StringBuilder bab=null;try URL myURL=new URL(http:/localhost/test.html);/初始化URL ucon=(HttpURLConnection)myURL.openConnection();/打开连接 ucon.setRequestMethod(GET);ucon.connect();reader=new BufferedReader(new InputStreamReader(ucon.getInputStream(),gb2312);/得到输入流 String currentline;bab=new StringBu

36、ilder();while(currentline=reader.readLine()!=null)bab.append(currentline);/将收到的信息添加到StringBuilder中 bab.append(rn);jsonstring=bab.toString();catch(Exception e)e.printStackTrace();/打印异常信息 finally try if(reader!=null)reader.close();catch(IOException e)e.printStackTrace();What is JSONJavaScriptObjectNot

37、ation轻量级的数据交换格式描述数据的格式轻量级(格式简单,一个页面的官网)易于人阅读和编写易于机器解析和生成独立于语言文本格式使用场景早期是网页浏览器与Web服务器之间交互数据的格式与XML一起作为Ajax返回的两种主要格式由于其轻量级的原因,逐渐成为主流的数据交换格式对象对象无序的“名称/值对”集合一个对象以“”(左括号)开始,“”(右括号)结束每个“名称”后跟一个“:”(冒号),再后跟着值,构成一个“名称/值对”每个“名称/值对”之间用“,”(逗号)分隔例如:name:LiLei,Gender:male,age:35数组数组有序的值的集合一个数组以“”(左中括号)开始,“”(右中括号)

38、结束值之间使用“,”(逗号)分隔例如:1,2,3,4,5,6,7,8,9A,B,C,D值值的类型字符串数值truefalsenull对象数组字符串数值JSON 数据解析解析JSON数据时,首先需要明确待解析的是JSONObject还是JSONArray,然后再解析JSONObject,name为名称,Lili是name的值,将name和Lili用“:”隔开,其文本形如:name:Lili/新建JSONObject,jsonString字符串中为上面的JSON对象的文本JSONObjectdemoJson=newJSONObject(jsonString);/获取name名称对应的值String

39、s=demoJson.getString(name);解析JSONArray一个简单的JSONArray,number为数组名称,1,2,3为数组的内容,其JSON文本表示如:number:1,2,3/新建JSONObject 对象,将jsonString 字符串转换为JSONObject 对象/jsonString 字符串为上面的文本JSONObject demoJson=new JSONObject(jsonString);/获取number 对应的数组JSONArray numberList=demoJson.getJSONArray(number);/分别获取numberList 中的

40、每个值for(int i=0;inumberList.length();i+)/因为数组中的类型为int,所以为getInt,其他getString、getLong 具有类似的用法System.out.println(numberList.getInt(i);使用Volley框架目的:图像缓存,请求的调度特点自动调度网络请求多个并发的网络连接通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致支持请求优先级支持取消请求的强大API,可以取消单个请求或多个易于定制健壮性:便于正确的更新UI和获取数据包含调试和追踪工具Volley使用下载Volley构建一个RequestQueueRequest

41、Queue requestQueue=Volley.newRequestQueue(this);/这里的this指的是Context创建一个Requestprivate final String url=http:/xxxxx/所需url JsonObjectRequest req=new JsonObjectRequest(url,null,new Response.Listener()Override public void onResponse(JsonObject response),new ResponseError.Listener()Override public void on

42、ResponseError(VollerError error);将req添加到requestQueueGson使用下载,放入libs目录/name:name0,age:0Person person=gson.fromJson(str,Person.class);/name:name0,age:0,name:name1,age:5,name:name2,age:10List ps=gson.fromJson(str,new TypeTokenList().getType();实例使用糯米团的api接口http:/ errno:0,msg:success,deals:deal_id:110788

43、51,image:*,tiny_image:*,title:漫火锅,min_title:漫火锅100元代金券,description:王府井店100元代金券!可叠加使用,节假日通用,提供免费WiFi!,market_price:10000,current_price:9000,promotion_price:9000,sale_num:1159,score:4.85,comment_num:26,deal_url:*,deal_murl:*,public class contentbean String deal_id;String image;String tiny_image;String

44、 title;String min_title;String description;float market_price;float current_price;float promotion_price;int sale_num;float score;int comment_num;String deal_url;String deal_murl;JSONprivate final String url=http:/ final String apikey=3609a18abc8477034e673051a9f36da1;MainLayoutItemLayoutlistview=(Lis

45、tView)findViewById(R.id.listview);adapter=new SimpleAdapter(this,list,R.layout.myitem,new String tiny_image,title,describle,new int R.id.item_img,R.id.item_title,R.id.item_describle);listview.setAdapter(adapter);初始化列表初始化队列requestQueue=Volley.newRequestQueue(this);JsonObjectRequest req=new JsonObject

46、Request(url,null,listener,new Response.ErrorListener()Overridepublic void onErrorResponse(VolleyError arg0)Overridepublic Map getHeaders()throws AuthFailureError Map map=new HashMap();map.put(apikey,apikey);return map;创建请求对象加入队列requestQueue.add(req);listener=new Listener()Overridepublic void onRespo

47、nse(JSONObject response)try List templist=new ArrayList();templist=gson.fromJson(response.getString(deals),new TypeTokenList().getType();list.clear();for(int i=0;i templist.size();i+)HashMap hash=new HashMap();contentbean cn=templist.get(i);hash.put(tiny_image,R.drawable.ic_launcher);hash.put(title,cn.getTitle();hash.put(describle,cn.getDescription();list.add(hash);adapter.notifyDataSetChanged();catch(JSONException e)e.printStackTrace();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁