版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要 线程(thread)技术早在60年代就被提出,但真正应用线程到操作系统中去。使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段。而运行于一个进程中的多个线程,它们之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间所需要的时间。 使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方
2、式进行,这种方式费时且很不方便。由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这样快且方便。 在计算机中,凡是提供服务的一方我们称为服务端(Server),而接受服务的另一方我们称作客户端(Client)。不过客户端及伺服端的关系不见得一定建立在两台分开的机器上,提供服务的伺服端及接受服务的客户端也有可能都在同一台机器上,这样在同一台机器上就同时扮演伺服端及客户端。 线程间方便的通信机制可以使得在我们在服务端和客户端方便的进行通信传输与各种操作,可以通过运用多线程机制方便实现上传、下载文件;增加、删除用户;以及在服务端进行文件的管理。&
3、#160; 本文介绍了基于TCP/IP协议的客户端和服务器通信的基础上,在Linux的环境对套接口进行编程,实现了双客户间的通信.关键字:双客户通信;Linux;TCP/IP协议;Socket套接口;I/O复用AbstractThread (thread) technology as early as in the 1960s have been proposed, but the real application threads to go to the operating system. One of the reasons is the use of multiple threads a
4、nd processes compared to, it is a very "frugal" multitasking operating mode. In the Linux system, start a new process must be assigned a separate address space, the establishment of a large number of data tables to maintain its code segment, stack and data segments. While running on a proc
5、ess of multiple threads between them using the same address space, shared most of the data, the space it takes to start a thread process takes far less than the space, and, switching between threads each required time is far less than the time required for inter-process.Reason two is the use of mult
6、iple threads to facilitate inter-thread communication mechanisms. Different processes, they have separate data space, the data to be transmitted only by way of communicating, consuming and inconvenient in this way. Because the shared data space between threads of the same process under a thread so t
7、hat data can be used directly by other threads, so quick and easy.In the computer, all serving one we call the server (Server), and served other we call the client (Client). But the relationship between the client and the servo end not necessarily build on two separate machines, servo end service de
8、livery and client services received may also be in the same machine, so that on the same machine at the same time to play on the servo end and client.Convenient communication mechanism between threads so that we can facilitate the conduct of the service and client communication transmission with a v
9、ariety of operations, it can easily achieve upload and download files through the use of multi-threading mechanism; add, delete users; as well as server-side for file management.This article introduces the basic client and server communications over TCP / IP protocol, in Linux the socket programming
10、 environment to achieve the dual communication between customers.Keywords: double customer communications; Linux; TCP / IP protocol; Socket socket; I / O multiplexing目 录第一章 绪 论41.1 前言41.2 嵌入式系统发展41.3 Linux系统71.4 本章小结7第二章 总体结构设计82.1 需求分析82.2 设计方式82.3 实现功能92.4系统结构图92.5本章小结9第三章 设计详解103.1 设计原理103.2 套接口函
11、数113.3 TCP的连接113.4 socket通信原理123.5 通信工作的流程:12第四章 设计步骤及结果144.1嵌入式ARM-Linux环境建立144.2 Arm-Linux交叉编译工具链的建立144.3 NFS网络文件系统的建立154.1 服务器创建164.2 客户端连接164.3 基本步骤164.4 运行结果18参考文献19第一章 绪 论1.1 前言嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统
12、,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式设计是企业电子产品设计的重要组成,目前国内外中小型企业内部都建立了自己的嵌入式开发团队。团队所需的人员职位构成包括:(1)系统设计工程师 (2)硬件工程师 (3)底层驱动工程师 (4)Linux系统工程师 (5)应用设计工程师等。对于企业而言,嵌入式开发越来越朝着敏捷开发、专业操作的方向发展。国内也逐步涌现出
13、一些专门定制开发电子产品、进行嵌入式外包的专业公司。对于企业而言,随时关注嵌入式承载硬件的发展尤其重要,尤其是ARM、FPGA、MCU的结构、工艺、速度正在经历着不断的变革。一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。1.2 嵌入式系统发展从20世纪七十年代单片机的出现到各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了近30年的发展历史。 嵌入式系统的出现最初是基于单片机的。70
14、年代单片机的出现,使得汽车、家电、工业机器、通信装置以及成千上万种产品可以通过内嵌电子装置来获得更佳的使用性能:更容易使用、更快、更便宜。这些装置已经初步具备了嵌入式的应用特点,但是这时的应用只是使用8位的芯片,执行一些单线程的程序,还谈不上“系统”的概念。嵌入式系统的发展现状:进入20世纪90年代后,嵌入式技术全面展开,目前已成为通信和消费类产品的共同发展方向。在通信领域,数字技术正在全面取代模拟技术。在广播电视领域,美国已开始由模拟电视向数字电视转变,欧洲DVB(数字电视广播)技术已在全球大多数国家推广。而软件、集成电路和新型元器件在产业发展中的作用日益重要,如维纳斯计划生产机顶盒,其核心
15、技术就是采用32位以上芯片级的嵌入式技术。在个人领域中,嵌入式产品将主要是个人商用,作为个人移动的数据处理和通讯软件。当前中国嵌入式系统市场上的热点应用有4:消费电子、安全防务、电子商务、物流管理等安全防务:近年来,安防界收益最大的就是嵌入式系统,安防产品进入嵌入化发展阶段后,从传统的门禁、摄像头、录像机,逐渐过渡到以嵌入式系统为基础的网络化设备,如网络摄像头、硬盘录像机、网络数据采集器等。 2.3电子商务、物流管理 针对目前的物流企业、商店、商场、超市等,通过一些小、中型嵌入式设备,很方便地完成商品信息的录入、获取等,如条码扫描、移动信息采集等,减少了大量的人
16、力、物力、财力。 自动控制:人们生活中经常使用的ATM机、自动售货机、GPS、与娱乐结合的嵌入式产品、工业控制和移动通讯设备结合产品等,嵌入式系统简直是无处不在,发挥作用巨大。近期长虹推出的ADSL产品将结合网络、控制、信息,实现智能化、网络化。 汽车智能化:随着基于CPU的汽车电子设备要求电源提供多变化电压和更强的功能,对电源管理要求更高,对电子设备显示屏更大、分辨率更高、体积更小,所有这些都将需要高集成度、高性能、高效率和低功耗的电源管理,还要尽量消除汽车开关电源对敏感电路的干扰。 电力系统管理:电力系统中,变电站点多面广,同时要求现代化管理,很多都是无人值班
17、变电站,基于嵌入式网络服务器的设备配置管理技术能够减轻设备运行人员的劳动,使设备管理部门能够及时了解变电站运行信息,对设备故障的处理也更加快速有效,伴随着国家电网的发展,基于嵌入式网络服务器的设备维护,将比以往基于远程拨号的维护方式更加优越。未来嵌入式系统的发展趋势:信息时代、数字时代使得嵌入式产品获得了巨大的发展契机,为嵌入式市场展现了美好的前景,同时也对嵌入式生产厂商提出了新的挑战,未来嵌入式系统的发展趋势有: 系统工程化:嵌入式开发是一项系统工程,因此要求嵌入式系统厂商不仅要提供嵌入式软硬件系统本身,同时还需要提供强大的硬件开发工具和软件包支持。目前很多厂商已经充分
18、考虑到这一点,在主推系统的同时,将开发环境也作为重点推广。比如三星在推广ARM7,ARM9芯片的同时还提供开发板和板级支持包(BSP),而WindowCE在主推系统时也提供Embedded VC作为开发工具,还有Vxworks的Tonado开发环境,DeltaOS的Limda编译环境等等。 功能多样化:随着因特网技术的成熟、带宽日益提高,使以往的设备功能不再单一,结构更加复杂,如电话、手机等。同时要求芯片设计厂商在芯片上集成更多的功能,满足应用功能的升级,一方面采用更强大的嵌入式处理器,如32位、64位RISC芯片或信号处理器DSP增强处理能力,同时增加功能接口,如USB,
19、扩展总线类型,如CAN BUS,加强对多媒体、图形等的处理,逐步实施片上系统(SOC)的概念。软件方面采用实时多任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质量和缩短开发周期。 网络化:未来嵌入式设备为了适应网络发展的要求,必然要在硬件上提供各种网络通信接口。新一代的嵌入式处理器已经开始内嵌网络接口,支持TCP/IP协议、IEEE1394、USB、CAN、Bluetooth或IrDA通信接口中的一种或几种,同时提供相应的通信组网协议软件和物理层驱动软件。软件方面系统内核支持网络模块,甚
20、至可以在设备上嵌入Web浏览器,实现随时随地上网。精简系统内核、降低功耗和软硬件成本 未来的嵌入式产品是软硬件紧密结合的设备,为了降低功耗和成本,需要尽量精简系统内核,只保留和系统功能紧密相关的软硬件,利用最少的资源实现最适当的功能,选用最佳的编程模型和不断改进算法,优化编译器性能。因此,既要软件人员有丰富的硬件知识,又需要发展先进嵌入式软件技术,如Java、Web和WAP等。 交互友好化:嵌入式设备能与用户亲密接触,最重要的因素就是它能提供友好的用户界面、图像界面、灵活的控制方式、对专业知识要求低,甚至不需要嵌入
21、式的知识就能让人们很快、很容易掌握嵌入式产品的使用方法,因此未来嵌入式系统需要更高的可交互性和高度抽象化。1.3 Linux系统Linux操作系统是多用户、多任务的操作系统,具有强大的可移植性、良好地编程环境和强大的网络工程。Linux操作系统是一个免费的操作系统,由于Linux是由Linus开发的,故以Linuxs UNIX命名,简称Linux。 Linux内核是Linux的主体,内核负责控制硬件设备、文件系统和程序任务调度等工作,但不包括用户程序。因为Linux内核是免费的,用户与厂商可自行配置应用程序。Linux内核是Linux的主体,内核负责控制硬件设备、文件系统和
22、程序任务调度等工作,但不包括用户程序。因为Linux内核是免费的,用户与厂商可自行配置应用程序。Linux作为一个现代的操作系统,正在各个方面得到广泛的应用。Linux在服务器、嵌入式等方面已经取得不俗的成绩,在桌面系统方面,也逐渐受到欢迎。于是Linux的安全问题也逐渐受到人们的重视。现在Linux已经在全球广泛普及开来,虽然在个人桌面版方面还逊色于Microsoft Windows系统,但在服务器领域以其良好的安全性和稳定性得到越来越多用户的认可,并被广泛使用由于Linux操作系统可在多种操作系统上运行,支持多平台,所以得到了广泛应用。1.4 本章小结本章主要介绍了嵌入式的特点及
23、发展,并给出了嵌入式系统之一的Linux系统简介,对于初步了解嵌入式系统有很好的引导作用。第二章 总体结构设计2.1 需求分析这次课程设计的要求是在以Linux为内核的操作系统下,实现多线程文件传输系统功能模块。系统模块分为服务器和客户端两部分,客户端实现对文件的上传、下载和查看服务器默认路径下的文件列表;服务器可以对文件进行管理操作,包括创建、删除和重命名等。多线程文件传输是一种一对多或者多对多的关系,一般是一个服务器对应着多个客户端。客户端通过socket连接服务器,服务器要为客户端创建一个单独进程(线程)监听每个客户端的请求。创建好连接之后文件就可以通过流的形式传输。linux内核中为我
24、们提供了两种不同形式的读写流,包括read()、write()和send()、recv()。客户机对文件的查看指令也是通过流传递给服务器,服务器根据请求类型返回不同相应流。 根据socket原理和特点绘画出链接流程图,将客户机与服务器的相互通信划分为不同的模块,每个模块负责独立的功能项。服务器输入指令管理目录下的文件,create filename是创建文件命令,rename oldname newname是删除文命令,delete filename 是删除文件命令,同时监听着客户端的请求;客户端向服务器发送上传、下载和查看请求,从而
25、得到不同的相应,包括将文件下载到当前路径下,从当前路径下上传文件给服务器,列出服务器的文件列表。2.2 设计方式大多数的网络应用系统可以分为两部分:客户(client)和服务器(server),它们通过TCP/IP协议进行信息的传输。通过套接口编写使用TCP或UDP的网络应用程序便可以实现不同的功能。 在简单的回射服务程序中,通过捕获信号SIGCHLD来处理僵尸进程;但由于客户阻塞于等待用户输入,当服务进程被终止时,客户并不能立即收到信息。通过基于select函数及poll函数的I/O复用技术,我们可以做到:当条件满足(如输入设备已被读、描述字可以承受更多的输出),就能被通知并采取行
26、到,而不是被动等待。如此,程序不但简洁、时效性高,而且充分利用了资源。 基于以上的技术,编写出了双客户通信程序,功能有二:一客户能发送信息,接收信息;二服务器能将客户信息进行传输。 2.3 实现功能客户1从标准输入写入一行文本到服务器上,服务器从网络输入读此行,客户2读此回射行标准输出,客户1也实现回射标准输出。2.4系统结构图系统结构如图1:主程序ServeClient发送交互信息客户连接处理解析客户请求协议图1系统结构图2.5本章小结本章主要介绍了设计的需求分析和设计方法,并给出了设计的总体框架,实现的预期目标等。第三章 设计详解3.1 设计原理在Linux系统上的网络通信可分成
27、客户和服务器两部分,它们通过通信链路进行相互链接,服务器通过派生子进程可以同时处理多个客户的请求。如下图1为双客户信息传输程序流程图。客户1通过fgets()函数接受键盘输入数据,通过writen()函数发送数据到服务器;服务器将接受到的数据转发给客户2;客户2通过readlin()函数读取服务器数据,并通过fputs()函数将数据显示屏幕上。图2 双客户信息传输程序流程图所用的TCP模型是Richard Stevens编著的UNIX网络编程中的I/O复用模型,调用通过select函数来处理套接口可读和标准输入可读,表现为对相应的文件描述符的处理。FD_SETSIZE是文件描述符的最大个数,一
28、般为1024,原则上说除去标准输入、标准输出、错误输出和监听,还有1000个可以用来描述客户的已连接套接字。服务器通信协议为TCP,地址为IPv4,先是socket()产生监听套接字,并用bind()绑定端口。接着进行监听,并用accept()建立连接,连接完成会生成“已连接套接字”。接着调用select()来处理不同的事件,用rset这个描述符集来记录建立的描述符数,并用client这个数组记录不同客户建立的连接描述符值。最后便是对建立的描述符数组进行轮询,按照不同状态处理。客户端就只需socket()和connect(),即可建立“已连接套接字”。接着进行文件描述符和套接字描述符的测试,如
29、果标准输入可读就读入并写到套接口,套接口可读就读入并写到标准输出。3.2 套接口函数一个完整的TCP客户及服务器程序是需要一系列基本套接口函数来支持的,下面可以看到这些函数相互配合,搭建了网络通信程序的各个环节。3.3 TCP的连接TCP通过三路握手来达到连接,下面是它们的步骤:A服务器必须准备好接受外来的连接,可以通过调用socket、bind和listen等函数完成,称为被动打开; B客户通过调用connect进行主动打开。这引起客户TCP发送一个SYN分节(表示同步),它告诉服务器客户在连接中发送的数据的初始序列号。一般情况下SYN分节不携带数据,它只含一个IP头部、一个TCP
30、头部及可能有的TCP选项。 C服务必须确认客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送数据的初始序列号。服务器以单个分节向客户发送SYN核对客户SYN的ACK。D客户必须确认服务器的SYN。图3 三路握手建立TCP同步连接3.4 socket通信原理国际标准化组织(ISO)在1978年提出开放系统互连参考模型(OSI:open system interconnection reference mode),该模型是设计和描述网络通信的基本框架。OSI采用分层的额结构化技术将通信网络分为7层,从低到高为物理
31、层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP参考模型是由美国国防部创建,且发展至今最成功的通信协议模型,与OSI模型对应,它将网络功能分为4层,包括网络接口层、网络层、传输层和应用层,每一层都有对应的协议。在传输层的主要协议是TCP协议和UDP协议。 socket连接就是基于TCP协议。TCP是一种可靠地数据传输协议。 socket是一种套接口,它把网络地址和端口号信息放在一个结构体中,也就是套接字地址结构。结构图如下图3所示:图4 套接口与ip、端口号的关系3.5 通信工作的流程:1)服务器先用socket()函数来建立一个套接口,用这
32、个套接口完成通信的监听及数据的收发。 2)服务器用bind()函数来绑定一个端口号和ip地址,是套接口与指定的端口号和ip关联。 3)服务器调用linsten()函数,是服务器的端口和Ip处于监听状态,等待网络中某一个客户机的连接请求。 4)客户机用socket()函数建立一个套接口,设定远程ip和端口 5) 客户机调用connect()函数连接远程计算机指定的端口。 6)服务器调用accept()函数来接受远程计算机的连接请求,建立起与客户机之间的通信连接。 7)建立连接之后,客户机用write()函数(或send())想
33、socket中写入数据。也可以用read()函数(或recv()函数)赌气服务器发送来的数据。 8)服务器用read()函数(或recv()函数)来读取客户机发来的数据,也可以用write()函数(或send()函数)来发送数据。 9) 完成通信以后,使用close()函数关闭socket连接。TCP套接口通信工作流程图:图5 TCP 套接口通信工作过程第四章 设计步骤及结果4.1嵌入式ARM-Linux环境建立绝大多数的软件开发都是本机开发、调试,本机运行的方式进行,但是这种方式不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,它没有足够的资源在本机运行开
34、发工具和调试工具。因此在宿主机上搭建一个好的开发环境是很关键的一步,它的成败直接影响下一步的进展。根据需求分析确定了系统的开发环境是嵌入式Linux操作系统。根据需求分析和嵌入式系统结构,得出了系统所需的系统结构如图3-1所示。图6 系统结构图实现步骤如下:(1)Arm-Linux交叉开发环境的建立; (2)嵌入式Arm-Linux的裁剪和移植:其中包括启动加载程序U-Boot的移植以及内核的裁剪、移植、文件系统的制作; (3)SDL的研究和编码实现; (4)应用程序的移植并测试。4.2 Arm-Linux交叉编译工具链的建立 与主
35、流软件开发相同,嵌入式系统开发同样需要用到编译器、链接器、解释程序、集成开发环境以及诸如此类的开发工具。但是在嵌入式系统开发中,由于执行应用程序的平台(目标机)与创建应用程序的平台(宿主机)并不兼容,因此,需要交叉开发工具进行交叉编译。本文采用工具链Arm-none-linux-gnueabi-创建Arm-Linux交叉编译环境。建立过程如下: (1)登录Linux操作系统,然后再/home/farsight目录下新建toolchain目录; (2)将工具链toolchains_for_s3c2410.tar.bz2复制到以上
36、toolchain目录下,并执行解压; (3)在宿主机中设置环境变量使得系统能自动调用已建立好的工具,具体的设置方法为:在根目录中打开/etc/profile文件添加交叉编译环境。具体设置方vi /etc/profile,在文件的最后加上:export PATH=$PATH: /home/farsight/toolchain/bin最后保存退出,在终端输入source /etc/profile即可生效,在终端输入arm-none按Tabs键即可提示得到该交叉编译工具的名称。4.3 NFS网络文件系统的建立NFS网络文件系统可以使得系统调试开发更容易进行,只需要将经
37、过交叉编译器编译之后生成的可执行文件通过NFS挂载到板子上为调试做好准备,避免反复的烧写可执行文件到FLASH中15,造成时间浪费和FlASH寿命的缩短。(1)安装NFS server端口映射和服务,首先需要下载相应的包,接着进行端口的映射,其命令如下:$ sudo apt-get install nfs-kernel-server nfs-common portmap $ sudo dpkg-reconfigure portmap,执行完后,在出现提示的时候,选定“不将 p
38、ortmap绑定在 loopback 地址”; (2)通过查看/etc/default/portmap,确保#OPTIONS="-i 127.0.0.1"前面的#号被添加了,重启portmap服务:$ sudo /etc/init. d/portmap restart;(3)编辑/etc/exports文件,添加目标系统的根文件系统映射目录,此时需要将目标系统的根文件系统最后映射到/opt/filesytem,在/etc/exports文件的最后添加如下内容:/opt/filesystem *(subt
39、ree_check,rw,no_root_squash,async) (4)重启NFS服务,并更新,其执行的命令为:$ sudo /etc/init.d/nfs-kernel-server restart,接着进行的操作为:$ sudo exportfs a,执行完后此时就基本上可以实现NFS服务; (5)测试NFS服务,将主机上的共享目录mount到自己另外一个目录下,如:mount 192.168.0.125:/home/farsight/toolchain /mnt,然后查看/mnt目录下是否有/home/farsigh/toolchain目录下的文件,如果有的话,则NFS服务启动成功。4.1 服务器创建服务器负责的功能模块主要有两部分,一是对连接进来客户端所有线程的管理和服务器目录下的文件管理;二是创建线程来单独监听客户端的动作。为了便于管理,我们创建两个serve.txt和client.txt两
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告宣传合同广告合同协议书
- 设备维保的预测性维护与故障预测技术
- 数字经济助力“双碳”目标的内在机理及路径
- 机电事故案例汇编
- 基于水下感应耦合原理的数据传输系统优化研究
- 基于人体姿态的人物交互检测算法研究
- 高光谱微波辐射探测关键技术研究
- 高速公路隧道维修工程招标合同三篇
- 消息驱动跳频通信抗干扰技术研究
- 2025年西师新版选修历史下册阶段测试试卷
- 标准作文稿纸模板(A4纸)
- 中小学校园突发事件应急与急救处理课件
- 2024年山东省普通高中学业水平等级考试生物真题试卷(含答案)
- 2024年青海省西宁市选调生考试(公共基础知识)综合能力题库汇编
- 2024年湖南高速铁路职业技术学院单招职业技能测试题库及答案解析
- 广州绿色金融发展现状及对策的研究
- 《近现代史》义和团运动
- 时间的重要性英文版
- 2024老旧小区停车设施改造案例
- 灰坝施工组织设计
- 韩国《寄生虫》电影鉴赏解读
评论
0/150
提交评论