• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

DELPHI基础教程第十八章Delphi客户服务器应用开发

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 
第十八章 Delphi客户服务器应用开发

  客户/服务器的开发工作涉及定义客户/服务器的体系结构, 然后再将该结构与其它一些对于客户/服务器的实现至关重要的系统结构和技术集成起来。Delphi 2.0Client/Sever版支持用户开发客户/服务器结构的应用程序。本章中我们将阐述客户服务器体系结构原理、如何用Delphi构建客户/服务器的环境和Delphi存取远程SQL服务器的编程和注意事项。

 

18.1 Delphi客户/服务器应用开发原理

 

18.1.1 客户/服务器体系结构

 

18.1.1.1 体系结构概述

 

  客户/服务器系统的体系结构有以下两个特点:

是集合智能用户工作站作为有效平台使用

平台和软件之间的互操作性

 

客户/服务器结构包括连接在一个网络中的多台计算机。那些处理应用程序,请求另一计算机的服务的计算机称为客户机(Client)。而处理数据库的计算机称为服务器(Server)。所有用户都拥有他们自己的计算机来处理应用程序。

客户机计算机可以是大型机、小型机或微机。但是由于微机具有成本的优势,因而通常选择它们作为客户机。同样地,服务器通常是一台微机但在需要较大能力时,也可以使用一台大型机或小型机。在数据库环境下,通过若干称作中间件(Middleware)的程序设计接口,客户机可以与服务器通信。这些接口提供应用程序和数据库之间的连通性。

 

 

 

18.1 客户/服务器体系结构

 

  虽然图18.1只有一个服务器,但客户/服务器结构也可以包括多个服务器。然而在这种情况下,每个服务器必定只处理一个不同的数据库或提供一个唯一的服务。(注意:使用两上或多个服务器来处理同一个数据库的结构不认为是客户/服务器系统,相反它是一个分布式数据库系统〕

  表18.1归纳了计算机在客户/服务器系统中的既定作用。

 

  表18.1 客户机和服务器计算机的作用

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

  客户机功能         服务器功能

   ───────────────────────────

  管理用户接口        从客户机接受数据库请求

  从用户接受数据       处理数据库请求

  处理应用逻辑        格式化结果并传送给客户机

  产生数据库请求       执行完整性检查

   向服务器发送数据库请求   提供并行访问控制

  从服务器接收结果      执行恢复

   格式化结果         优化查询和更新处理

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

 

18.1.1.2 客户机概述

 

  如上所述,客户机运行那些使用户能阐明其服务请求的程序,并将这些请求传送到服务器。由客户机执行的计算称为前端处理(front-end processing)。前端处理具有所有与提供、操作和显示数据相关的功能。

  客户机软件由网络接口软件、支持用户需求的应用程序以及实现网络能力的实用程序【例如电子邮件(E-Mail)和群件(Groupware)】组成。网络接口软件提供各种数据传输服务。应用程序软件执行具体的任务,如字处理、电子表格和数据库查询生成。实用程序软件通常执行几乎所有网络用户都要求的标准任务。

 

18.1.1.3 服务器概述

 

  在服务器上执行的计算称为后端处理(back-end processing)。后端硬件(back- end hardware)是一台管理数据资源并执行数据库引擎功能(如存储、操作和保护数据)的计算机。在大型机环境下,后端网络(back-end network)提供大型计算机至大容量存储设备、控制器以及文件服务器的连接。在识别、评价和选择适当的服务器平台时,必须考虑将由该平台提供的服务。例如,一个数据库服务器可能需要快速处理能力。其他可能需要执行的网络服务有通信、应用程序、文件访问以及只读存储器(CD-ROM)服务。随着新的应用技术的广泛使用,可被提供的潜在服务还将继续增加。

  服务器软件既包括遵循于OSI或其它网络结构的网络软件,又包括由该服务器提供给网络上客户机的应用程序或服务软件。

 

 

 

18.1.1.4 中间件概述

 

  中间件是一个软件层,它保护应用程序开发人员避免受到各种通信协议、操作系统以及数据库管理系统的影响。它为建立可与以前沿袭下来的应用程序并存的新应用程序打下了基础。

  中间件有好几种类型。它们包括应用程序设计接口(API),远程过程调用(RPC),网络通信、数据库访问以及计算机辅助软件工程(CASE)工具。

  由于客户/服务器系统需要集成各种不同结构的机器和技术,因而应用程序设计相当复杂。选择适当的中间件可以消除程序设计人员为每个单独协议和操作系统编写代码的麻烦。

 

18.1.2 关系数据库体系结构与客户/服务器模式

 

18.1.2.1 关系数据库概述

 

  关系数据库被定义为一种特殊的数据库,其中各个文件(称作关系)以平面文件(FlatFiles)或表的形式保持数据。表必须只含有一种记录类型。每个记录具有固定数目的字段,所有字段皆显示命名。表内的字段内容是各不相同的,不允许重复组(repeating groups)。不含有复制记录和预定的记录序列。

  在构造关系数据库时,必须特别注意关系的内容以及记录的各属性(字段)之间的内在联系。

  关系数据库上的基本操作有选择、投影、连接和除法,选择建立一个含有与原始关系相同列数的新表,但是行只包括那些满足某些特写标准的原始关系行。投影操作指定将被选择的列,因而形成的表只含有原始表列的一个子集。如果在投影操作删除的列中有两个行不同,那么将只有一个记录被转入新的关系。连接操作从两个或多个表中组合信息。两个表中的公用字段用作组合记录的基础字段。在公用字段中具有相等值的记录被连接在结果关系内。

 

18.1.2.2 关系数据库实现的任务

 

  实现关系数据库所涉及的任务分为三组:

DBMS定义数据库结构的任务

将数据库分配给物理存储介质的任务

建立数据库数据的任务

 

执行这些任务的方法取决于所采用的DBMS产品。

  各种不同的DBMS产品提供定义数据库结构的实用程序。这些实用程序使用一种专用的数据定义语言(DDL)。某些DBMS产品含有一些规定,一旦数据库已被定义到DBMS,即将该数据库分配到物理介质。根据应用程序处理的特点,数据可以定位在指定表上或定位在同一磁盘上。它有些DBMS产品偏重于数据库数据的建立。

  如上所述,数据库定义、存储分配以及数据建立过程都将取决于应用需求和所选择的特定DBMS产品的特征。

 

 

 

18.1.2.3 关系数据操作

 

  为了开发数据库应用,需要使用一种语言来表达处理逻辑。关系数据操作语言共有四类:

  ● 关系代数,它是一种语言,提供一组远算符处理关系数据库中的关系

  ● 关系演算,它是一种语言,在该语言中用户指定一组来自关系数据库内数据操作的结果

  ● 面向变换的语言,它们构成一类非过程语言,这类语言将表示为关系的输入数据变换成表示为单个关系的结果。SQL就是一种面向变换的语言

  ● 面向图形的系统,它们为用户提供一个关系结构的图形,如BorlandParadox IBM公司的QBE(Query By Example)

 

  用户可以采用多种方法与关系数据库进行联系:

某些DBMS产品,包括有生成表格的工具并提供表格和报告的处理

通过查询语言提供一个接口,它们执行查询和更新功能;最重要的查询语言是SQL

与关系数据库联系的第三种方法是通过应用程序

 

18.1.2.4 扩展关系系统

 

  众多的销售商都在积极扩展关系模型。这些扩展包括在关系表中存储复杂数据类型、存储过程、触发器以及二进制大对象(BLOB)。目前正在SQL 3标准中考虑的SQL扩展将包括对对象的进一步支持,还有可能包括对用户定义数据类型及嵌套表的支持。向关系模型提供对象扩展的产品包括SybaseInformixOracleBorland

 

18.1.2.5 SQL:集成客户/服务器体系结构的基本链路

 

  SQL为前面讨论的集成客户/服务器体系结构提供一条基本链路。目前美国国家标准局(ANSI)已认可SQL作为操作数据库的正式工业标准。它是许多数据库管理系统(DBMS)产品都采用的数据存取语言。

  SQL允许用户在关系表数据上进行查询、建立新表、存取现有的远程表、操作数据、建立应用程序存取SQL数据,运行SQL语句,处理错误以及访问多个服务器。SQL数据库服务器是多用户关系数据库管理系统(DBMS)

  SQL可以作为一个查询语言用于交互式使用或嵌入在应用程序中。在执行查询时,SQL接受一个或多个关系作为输入并产生一个关系作为输出,结果是一个表或平面文件,例如,一批不含有重复组的同一类型记录。在查询多个表时,SQL将这些表连接起来。SQL内还含有一些规定,用来向表中插入新数据、从表中删除数据或修改表中的数据。

 

18.1.3 各种数据库服务器功能介绍

 

  服务器数据管理包括若干软件,它们使用户可以访问网络中的任何节点以及确保多用户环境下的保密性、可恢复性和完整性。如前面所提到的,客户/服务器计算中的基本存取链路是SQL,它是一种高级非过程数据库语言, 现在已开发出很多支持SQL 的后端服务器及DBMS。下面将描述这些产品。

 

18.1.3.1 DB2

 

  DB2是一种由IBM公司开发的RDBMS。它使用SQL执行所有的数据库操作。数据定义、数据存取、数据操作以及授权功能。SQL语句由用户在一个客户机节点从键盘输入或嵌套在应用程序中。

  DB2的结构包括表、视图、表空间、索引、索引空间、数据库和存储组。 这种RDBMS提供有允许用户动态建立和修改这些结构的工具。DB2还包括一些并行处理软件,以控制和限制干预、后备和恢复功能以及安全性保证等。

  并行处理通过锁来完成,当应用程序读数据库数据时,DB2在该数据上获取一个共享锁,允许其他应用程序读这个相同的数据。如果一个应用程序需要修改数据,那么DB2将一个互斥型锁放在该数据上,以阻止其它应用程序访问这个数据。DB2还提供一些关于锁的级别或锁的大小的任选项。

  DB2周期性地存储并检查所有数据库变化。所有驻留在系统缓冲区中的变化被写到数据库,并将一个变化的记录载入日志。以最近一次写到日志的变化起所建立的全部映像可用于完成系统故障的恢复。DB2包括一些用来从备份拷贝重新建立数据库的实用程序。这种实用程序含有一个选择项,允许用户只拷贝表空间中那些自最后一个备份后新被修改的页面。

  DB2还含有一些用来保护数据库的安全性规定。

 

18.1.3.2 Borland对象成分体系结构(BOCA)

 

  BOCA建立了一个既考虑开发工具又考虑数据库管理工具的客户/服务器体系结构。它将一级面向对象的工具、中间件和数据库服务器技术集中在一起提供客户/服务器的解决方案。该体系结构的组成部分有:

  1. 先进的面向对象工具

Borland建立有广泛基础和紧密集成的面向对象的工具,这些工具充分利用了当前客户/ 服务器变革的优点。使用面向对象的方法学,建立了如下产品:Borland C++Borland DelphiParadoxQuattroProVisual dBase以及ObjectVision等。

  2. IDAPI

IDAPI(集成数据库应用程序设计接口)Borland公司的SQL连通性解决方法。 IDAPI使得开发人员能够以更高的效率建立数据库应用,允许用户在多种硬件和操作系统平台以及网络环境下访问,以多种数据库格式存储的数据。

  3. InterBase

InterBase是一种分布式SQL数据库服务器。它支持每个数据库系统查询数据并将信息返回到其它任何一个InterBase服务器。InterBase 的可变体系结构代表了关系系统技术的第三次浪潮,可变引擎使得InterBase可以以最少的锁支持高效事务处理和决策支持事务处理。

  Borland公司的面向对象技术使得开发人员可以通过构造模块化的应用成分来建立复杂客户/服务器系统。这些模块化应用成分可以很容易地开发、测试、维护和增强,并可方便地装配到复杂的应用程序包中,此外Borland公司的可视化技术极大地提高了软件生产率。

 

18.1.3.3 Informix SQL服务器系列

 

  Informix公司推出了多种产品来满足特定的客户/服务器需求。 它们包括Informix-On-LineInformix TP/XAInformix Star Informix On-Line/OpticalInformix On-Line工作站版。

  Informix-On-Line是一个联机事务处理(OLTP)数据库服务器,具有可用性、数据完整性以及多媒体数据管理能力。它建立有效的数据存储方法进行快速数据存取;缓冲数据于内存最低限度地使用磁盘存取;利用多处理器特征,允许不同处理器同时存取;以及自动确定是有效的搜索策略等,从而获得极高的性能。

  Informix-TP/XAOn-Line连接到事务处理管理程序;支持那些涉及多个数据库以及多个DBMS(由不同的销售商提供)的事务处理。在众多RDBMS中,Informix 第一个向依从于X/Open XA的事务处理管理程序提供了这种基于标准的接口。

  Informix-STAR是一种用于On-Line的分布式客户/服务器数据库产品,它提供最佳的性能,并且具有最小的网络通信量、站点透明性以及在不同站点操作数据库的高度可靠性。

  Informix-On-Line/Optical是一种针对On-Line用户的附加产品。这些用户想在他们的数据库系统上使用具有大容量存储能力的光学设备。On_Line/Optical允许用户在“写一次读多次”(WORM)的光学子系统上存储BLOB。用户必须拥有On-Line/Optical On-Line和一个光学子系统。那当然,如果没有这个On-Line/Optical产品用户仍可以使用On- LIne在磁存储设备上操作BLOB

  Informix-On-Line工作站版是On-Line管理员手册的图形化版本。该工作站版具有与硬件版本相同的技术内容,但它是构造在一个窗口化、点一揿式(Point-and-Click)图形接口,采用关键字交叉查阅。这使得用户可以在某一窗口中存取所需信息的同时,在另一窗口中配置监视或调节On-Line

 

18.1.3.4 Microsoft SQL服务器系列

 

  作为Microsoft SQL服务器系列的一部分,有以下产品:Microsoft SQL Server for Window NTMicrosoft SQL Administrator for WindowsMicrosoft SQL Bridge Microsoft SQL Server程序员工具包。

  Microsoft SQL Server for Windows NT旨在为有关键任务的应用系统管理大型数据库和满足网络化客户/服务器应用的需要。

  Microsoft SQL BridgeMicrosoft SQL Server环境和Sybase SQL Server环境之间提供一个协议网点。

  Microsoft SQL程序员工具包提供开发客户/服务器应用程序的灵活性,这些应用程序将关键的组合信息传送给基于WindowsMS-DOSOS/I的生成系统。

 

18.1.3.5 Oracle RDBMS

 

  Oracle RDBMS为以任务为中心的企业范围的应用提供所需要的操作、监督和管理软件。使用Oracle RDBMS的分布式数据库和网点能力,用户可以透明地集成该企业的新旧数据、系统和应用程序。Oracle被分组形成几个软件包,使得客户可选地获取他们自己的应用所需要的功能。这些软件包是:

标准Oracle软件包

过程化选件软件包

分式式对象软件包

并行服务器选件软件包

开放网关软件包

 

  标准Oracle软件包提供解决大量关键任务的联机数据处理(OLDP)和决策支持应用所需要的功能及性能。这个标准软件除具有其它几个软件包的全部特征外,还有以下标准Oracle软件包所专有的特征:

  1. Oracle的过程化选件(procedual option)

提供多种能力可使数据库服务器成为应用环境的一个有效组成部分,过程化选件非常适用于具有高级需求和复杂商业实施规则的应用。它可选择地包括在Oracle服务器内使用程序设计语言PL/SQL过程的能力。具有存储过程和函数、过程软件包、数据库触发器、锁管理程序软件包以及数据库报警等特点。它还允许交互式提交或从3GL(第三代语言)程序提交“匿名”PL/SQL过程。

2. 分布式选件(distributed Option)允许把一个物理分布式数据库当作一个逻辑数据库来看待。那些需要在多个站点更新数据的应用可以从分布式选件获益。该选件的特征包括:

分布式更新

事务处理(TP)

监控器(XA)接口

透明的二阶段提交

远程过程调用(RPC)

表复制以及Oracle邮件接口

 

对于标准Oracle服务器,还包含查询能力和全局数据库名。

  3. 并行服务器选件(Parallel | Server Option)

提供对松耦合系统多个节点的支持,从而并行存取OLTP和决策支持的一个数据库。并行服务器在高性能、可扩充性、可用性以及数据库连接等领域具有极大的优势。并行服务器选件包括高速缓存(Cache)管理以及松耦合和大规模并行平台所需要的其它所有特征。

  4. Oracle开放网关软件包

提供对非Oracle数据管理程序、文件系统、应用程序和其它各种系统中的数据可编程且透明的存取。Oracle公司采用开放网关技术来向众多流行的数据系统和文件系统提供SQL连接网关,以进行透明的SQL存取。对于那些没有SQL连接产品的目标数据管理程序,Oracle开放网关开发人员工具包可以简化基于开放系统的应用手册的系统、数据及应用的集成工作。

  如果有些部门希望使用基于数据灵敏性或分类的存取控制,那么Trusted Oracle 会包含有Oracle T的所有特征,并具有多级安全性。

 

18.1.3.6 Sybase SQL服务器系列

 

  Sybase SQL客户/服务器体系结构由三个产品系列组成Sybase SQL服务器、Sybase生命周期开发工具和Sybase开放式互操作性产品。

  Sybase SQL服务器是一个针对联机应用的RDBMS。它提供亚秒级响应时间,每用户低成本操作和可用性,SQL服务器智能数据词典收集了众多数据定义、商业规则、报告以及配置信息。

  Sybase SQL生命周期工具提供一种快速原型设计、建立和维护联机应用的手段,使事务处理模型化,实施商业规则保护数据完整性,并将现有应用与新的数据源结合起来。

它们允许开发人员在SQL卡上用生命周期的各个阶段工作。利用Sybase工具,开发人员可以任意组合使用SQL3GL4GL多媒体和面向对象的工具来建立联机系统。

  Sybase的互操作性策略提供用于开发客户机和服务器应用的两种扩展工具包,并面向最通用的RDBMS提供拨动网关(turnkey gateways)。该策略使得复杂计算环境下的多机种硬件,操作系统、网络、数据库和应用程序协同作成为可能。

 

18.1.4 IDAPI结构原理

 

  IDAPI(集成数据库应用程序设计接口)Borland公司解决客户/服务器连通性的方案。也是Delphi 客户/服务器开发的重要组成部分。为了说清楚什么是IDAPI,让我们先来讨论一下普通数据库的接口问题。

每个数据库管理系统和数据库应用都需一定的方式来访问内容所采用的数据格式,连接二者的部分称为接口,其最简单的情况就是对文件的直接访问,也可复杂到由几个层次组成。

  当今,面向用户的数据库通常都直接与其数据打交道,对那些有一定的用户和使用了一定时间的产品尤其如此。制造商总是认为自己的产品就是标准,而不关心对其它数据格式的访问。同样,许多纵向数据库应用用类似C的语言开发,多是直接访问其数据库。对开发者,这样做会变得容易些,但用户的情况往往是多变的。他对底层数据格式的选择并不一定与产品一致。其实在ODBCIDAPI等尚未推出的前20年里,工业界已经认识到,一个DBMS不只是要访问其自身的数据格式。

  广义地讲,数据库接口可分为以下两类:

  ● 本地型(Local)

  ● 客户/服务器型(Client/Server)

 

18.1.4.1 本地型数据库接口 

  本地型数据库是伴随微机的产生而产生的。dBASEII作为最早的并仍在使用的系统之一就是典型的本地型数据库。 

 

  本地型数据库管理系统的数据存放在一个本地硬盘上。DBMS接受来自用户或用户程序的命令。这些命令通常是系统特有的数据库管理语言。命令被转换为简单的磁盘访问命令,并交付文件系统来处理。然后DBMS接收来自磁盘上的数据,并加以处理。

  在本地型DBMS应用中,数据库引擎(DBE)运行于工作站上。图18.2暗示数据是存放在工作站的局部驱动器上,其实在网络中,数据还可存放在文件服务器上。这里数据库引擎使用典型的文件I/O调用和记录封锁技术来直接读写数据。 

  存放数据的文件位于网络中的某个服务器上时,DBMS的行力与单机情况无异。 网络操作系统负责对服务器的管理,因此对DBMS而言,对服务器的使用就象使用局部的驱动器一样。

  当用户发出命令,请求DBMS读取数据库中的数据时,该请求首先由工作站(客户)的网络驱动程序处理,它负责把请求从网络上传到所需的服务器网络文件系统。服务器操作系统从适当的磁盘卷上找到数据,并发回等待中的工作站驱动程序。最后,数据回传给DBMS,这样DBMS使用这些数据就象使用本地存储的数据一样。网络情况下的接口比单机情况下接口的处理增加了通信开销,正常情况下这种额外开销不会影响用户的响应时间,除非在网络通信的高峰期间或DBMS要求大数据量传递。

  对于本地型DBMS其大部分工作都在工作站一侧完成,即使数据存储在文件服务器上,其对数据的处理仍然要在工作站上进行。这种方式的最主要的一个缺点是无论查询需要多么少的数据,都需要首先将查询中的所有数据通过网络传到工作站,然后由工作站负责选出满足查询条件的数据,不难想象,当几个用户同时操作数据库时,数据库网络的带宽会很快阻塞。

  在这一方式下,工作站不仅要负责所有用户界面管理,还要负责所有数据处理的工作。在当今的数据库应用中,尤其是那些功能强且使用简便的系统,用户界面的处理开销是相当大的,象Windows这样的图形环境,处理上的额处开销会更大。为此而升级工作站是很得不偿失的。

 

18.1.4.2 客户/服务器型数据接口

 

  由于服务器硬件技术逐年迅速地提高,数据库在处理模式上在近五年内发生了改变。本地型DBMS逐渐让位给客户/服务器型DBMS,尤其是在大中型企业中更是这样。

  正如名字所暗示的,客户/服务器是将处理工作分散到工作站和服务器上去处理,服务器不仅负责存取数据,还要对数据作一定的处理工作,这样在数据发送给工作站之前即求得查询结果集,从而在大部分情况下可大大减少网络传输的开销,因此,也减轻了工作处理负担,从而只需关心用户界面的处理工作即可。

  服务器处理数据带来的另一个好处是,当服务器中数据库引擎使用了缓冲机制时,多个工作站可以从中受益。例如,一用户查询了某数据,当另一用户要查询同样的数据时,即可从服务器缓冲中直接得到结果,从而免去很多开销。

  客户/服务器系统的成功与否在很大程度上依赖于服务器硬件质量和容量。用户越多,服务器的处理负担越重,相应服务器硬件性能也要跟得上,否则就会导致响应时间比本地型数据库还要差的结果。  

 

  处理工作,而工作站负责用户界面处理工作 

  客户和服务器间的数据库接口要比本地型系统复杂得多。它有几个转换级负责命令和结果集在工作站和服务器间的传送。图18.5给出了客户/服务器数据库接口的详细情况。 

  客户/服务器的前端应用程序实际上不直接与数据库引擎打交道。每个客户服务器提供一个数据库通信接口,该数据库通信接口运行于前端。这些接口也称为数据库通信API等。数据库通信接口的工作流程如下:

  ① 前端应用程序发送命令给数据库通信接口。

接口通过网络把命令传给数据库引擎。

 ③ 数据库引擎在服务时上做查询或更新操作之类的工作,通过网络文件系统访问物理数据。

  ④ 数据库引擎将结果返送给工作站上的通信接口。

  ⑤ 前端从接口上接到结果后,显示或按用户要求做其它处理。 

  客户/服务器型比本地型DBMS更接近ODBC的原理。因为由前端向数据库的命令发送和由数据库向前端结果的返回都是透明的,并不需知道具体传送方式如何,各系统存在差别地方是:客户/服务器系统在管理工作站和服务器间通信的方式不同,彼此会不兼容。此外,对于本地型DBMS缺乏读取不同类型数据源的能力的问题。这些问题在IDAPI中得到了有效解决。 

 

18.1.4.3 Borland Delphi 的解决方案 

  IDAPI是通过BDE(Borland Database Engine)SQL Links,来解决本地型数据库接口和


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB学习--多项式拟合(1) - 铁树银花发布时间:2022-07-18
下一篇:
matlab中提示错误使用*BLASloadingerror解决方法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap