




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Delphi 的 Socket 编程要分几步? ClientSocket 和 ServerSocket 几个重要的属性: 1.client 和 server 都有 port 属性,需要一致才能互相通信 2.client 有 Address 属性,使用时填写对方(server)的 IP 地址 几个重要的事件: client:OnRead 事件,当 client 收到消息时在 OnRead 事件中可以获得 server 发送过 来消息。 Server: OnClientRead 事件,与上述 client 的作用相同 发送信息: clien 使用 SocketClient1.Socket.SendBuf(char 类型的数组,信息长度); server 使用 SocketServer1.Socket.Connection0.SendBuf(char 类型的数组,信息长度); 接收信息 clien 使用 SocketClient1.Socket.ReceiveBuf(char 类型的数组,信息长度); server 使用 SocketServer1.Socket.Connection0.ReceiveBuf(char 类型的数组, 信息长 度); 使用 sockets: Socket 控件让你建立一个利用 TCP/IP 和有关的协议与其他系统进行通信的应用。 使用 Sockets,你能够读和写通过它连接的其他机器,而不用担心实际的网络软件的相关细 节。Sockets 提供基于 TCP/IP 协议的连接。 Delphi 提供通过网络服务器或客户应用程序去读和写其他的系统的功能。一个服 务或客户程序通常专注于一个单一的服务,如超文本传送协议(HTTP)或文件传输协议(FTP)。 使用 server sockets,一个应用程序可以通过这些服务中的一个去连接一个希望使用服务的客 户程序。Client sockets 允许一个应用使用这些服务中的一个去连接提供这个服务的服务应 用。 使用 sockets 去写应用程序,你必须理解下面这些知识: 一、服务工具 当你需要写网络服务或客户应用时,Sockets 提供一种接合。对于许多服务,象 HTTP 或 FTP,第三方服务商提供这些服务已经相当有效。有些甚至随着操作系统捆绑而 来,以便不用你自己写。然而,当你想更多的控制服务的实现,比如想让你的应用程序与 网络通信更加紧密,或当没有一个服务能提供你特殊需要的服务时,你可能想建立你自己 的服务或客户应用。例如,工作在分布式 data sets 时,你可能想为数据库写一层与其他系 统通信的应用。想使用 Sockets 实现一个服务,你必须理解: 1.服务协议 在你写一个网络服务或客户程序前,你必须明白你的应用将提供或使用什么服务。 你的网络应用必须支持许多服务的标准协议。如果你为标准的服务例如 HTTP,FTP 写网络应 用,你必须先理解与其他系统通信所使用的协议。特殊服务细节你必须看提供的或使用的 文档。 如果你的应用程序提供一个新的服务与其他系统通信,第一步是为这个服务的服 务端和客户端设计通信协议。什么信息将发送?如何整理这些信息?如何对这些信息进行 编码? 应用程序通信 经常的,你的网络服务端或客户端应用程序要提供一层在网络软件和一个应用之 间使用的服务。例如,一个 HTTP 服务站点在 internet 与一个 Web 服务应用之间为 HTTP 请求信息提供内容和应答。 在你的网络应用(或客户应用)和网络软件之间 Sockets 提供一个接口。你必须 提供一个接口,在你的应用程序与应用间使用。你可以拷贝第三方服务商提供的标准 API(例如 ISAPI) ,或你可以设计和发布你自己的 API. 2.理解服务和端口 许多标准服务都有关联的、指定的端口号。当执行服务时,你可以为服务考虑一 个端口号。如果你实现一个标准服务,Windows socket objects 提供一些方法让你为服务寻 找端口号。如果提供一个新的服务,在基于 Windows 95 或 NT 机器上,你能够在文件 Services 中为你的服务指定一个相关联的端口号。设置 Services 文件的更多信息请看微软的 Windows Sockets 文档。 二、Socket 连接的类型 Socket 连接可以分成三个基本的类型,它们反映了如何开始连接和本地 Socket 连 接是什么。这三个类型是: 1.客户端连接 客户端连接是一个本地系统的客户端 socket 与一个远程系统上的服务端 Socket 连 接。客户端连接由客户端 Socket 开始。首先,客户端 Socket 必须描述它想连接到的服务端 Socket. 接着客户端 socket 查找服务端 socket,当找到服务器时,就要求连接。服务端 socket 可能不能完成正确的连接。服务器 sockets 维持一个客户端请求队列,在他们有时间 时完成连接。当服务端 socket 接受客户端连接,服务端 socket 将向它想连接的客户 socket 发送一个完整的描述,客户端的连接完成。 2.监听连接 服务器 socket 不会主动去定位客户端,他们形成被动的 “半连接“ 状态,监听来自 客户端的请求。服务器 sockets 形成一个队列,存放它们听到的连接请求。这个队列记录 着客户端连接请求,就象他们已连接进来一样。当服务器 sockets 同意客户端连接请求时, 它将形成一个新的 socket 去连接客户端,因此这个监听连接能保持开放状态允许其他客户 端的连接请求。 3.服务端连接 当监听 socket 同意一个客户端请求时,服务器端 socket 形成一个服务器连接。当 服务器端同意连接时,向客户端发送一个服务端 socket 描述以完成连接,当客户端 socket 收到这个描述时这个连接得到确认,连接完成。一但连接到客户端的 Socket 完成,服务端 连接就不能识别从一个客户端来的连接。末端双方有同样的能力去接收同样的事件类型。 只有监听(listening)连接是根本不同的,它只有一个单一的末端。 三、sockets 描述 Sockets 让你的网络应用软件通过网络与其他系统进行通信。在网络连接中每个 socket 可以看成一个终端点。它有一个指定的地址。 *这个系统正在运行 *它理解的接口类型 *用来连接的端口 一个完整的 socket 连接描述,你必须提供 sockets 在连接两端的地址。在你开始 一个 socket 连接前,你必须完整的描述你想得到的连接。有些信息可以从你的应用软件运 行的系统平台上得到。例如,你不需要描述一个客户端 socket 的本地 IP 地址-这个信息可 以从操作系统上获得。你必须提供你工作所依靠的 socket 的类型的信息。客户端 socket 必 须描述他们想连接的服务器。监听服务器 sockets 必须描述他们提供反应的服务器的端口。 一个 socket 连接终端的完整描述包括两部分: 1.IP 地址 主机是这样一个系统,它运行着包含有 socket 的应用程序。你必须描述主机给 socket,通过给出主机的 IP 地址来完成这个描述。IP 地址是一个有四个数字(byte)值的, 在 internet 上使用的标准点分十进制字符串。 例如: 一个简单的系统可以支持多于一个的 IP 地址。IP 地址通常难于记忆并且容易打错。 一个可供选择的方法是使用主机名。主机名就是 IP 地址的别名,它就是你常看到的统一资 源定位符(URL) 。它是一个字符串,包括了协议、服务和域名。 例如 许多内部网提供给主机的名字对应的系统 IP 地址是 internet 的 IP 地址。在 windows95 和 NT 机器上,如果一个主机名不能用,你可以在 HOSTS 文件中为你的本地 IP 地址(这个本地 IP 地址应该是指你想连接的主机 IP 地址 )建立一个进入的名字。 关于 HOSTS 文件的更多信息请看 WINDOWS SOCKETS 的文档。 服务器 sockets 不需要指定主机。本地 IP 地址可以从系统中读到。如果本地系统 支持多于一个的 IP 地址,服务器 sockets 将同时在所有的 IP 地址上监听客户端请求。当一 个服务器 socket 同意一个连接,客户端提供一个远程 IP 地址。客户端 sockets 必须通过提 供主机名或者 IP 地址来指定远程主机。 在主机名和 IP 地址间作一个选择 许多应用软件使用一个主机名去指定一个系统。主机名容易记住并且容易检查错 误。进一步讲,服务器能改变系统或与 IP 地址关联的特殊的主机名。使用一个主机名,能 够允许客户端通过主机名描述找到抽象的站点,即使主机使用一个新的 IP 地址。 如果主机名是未知的,客户端 socket 必须指定服务器系统使用的 IP 地址。通过给 一个 IP 地址来指定服务器将更快。当你提供主机名时,socket 在定位服务器系统前,必须 搜寻与这个主机名相关的 IP 地址。 2.端口号 虽然 IP 地址提供了足够的信息去找到 socket 连接中位于另一端的系统,但你还必 需要为 Socket 连接指定一个端口号。没有端口号,一个系统在同一时间只能进行一个单一 的连接。端口号是允许一个独立系统同时支持多个主机连接的唯一标识,每个连接都必须 指定一个端口号。 在网络应用中,对于服务器工具来说端口号是一个数字代码。有一个习惯就是监 听服务连接到他们自己固定的端口号上,以便他们能找到客户端 sockets.服务器 socket 监 听为他们提供服务的相关端口号。当他们允许给予一个客户端 socket 连接时,他们创建一 个独立的 socket 连接,使用不同的专用的端口号。通过这个方法,能持续的监听相关服务 的端口号。 客户端 socket 使用一个专用的本地端口号,就不用其他的 socket 去寻找它们。他 们指定他们想连接的服务器端 socket 的端口号,这样他们就能找到服务器应用程序。常常 的,这个端口号是通过命名想连接的服务来间接指定的。 四、使用 socket 控件 Delphi 提供两个 socket 控件,客户端 sockets 和服务器 sockets.他们允许你的网络 应用构成连接其他的机器和允许你通过这个连接来读写信息。与每个 socket 控件相关联的 是 windows socket 对象,它们在终端的的作用是一个实际的 socket 连接。socket 控件使用 windows socket 对象去封装 windows socket API 调用,所以你的应用不用去关心连接建立的 细节或管理 socket 信息。 如果你想利用 windows socket API 调用或自定义连接细节,socket 控件提供了便利, 你可以使用 windows socket 对象的 properies,events 和方法。 1.使用客户端 sockets 添加一个客户端 socket 控件( TClientSocket)到你的 form 或 data module 使你的应 用成为一个 TCP/IP 客户。客户端 sockets 允许你指定你想连接的服务器 socket 和你希望服 务器提供的服务。一但你描述你想得到的连接,你可以使用客户端 socket 控件去完成连接 服务。 每个客户端 socket 控件使用独立的客户端 windows socket 对象(TClientWinSocket) 去应答连接中的客户终端。使用客户端 sockets 去: A.指定想得到的服务 客户端 socket 控件有一个数字 properties,允许你指定想连接的服务器系统和端口。 你可以通过主机名来指定服务器系统,使用 Host property。 如果你不知道主机名,或者你关心找到服务器的速度,你可以指定服务器系统的 IP 地址,通过使用 Address property。你必须指定 IP 地址或主机名中的一个。 如果你两个都指定,客户端 socket 控件将使用主机名。除服务器系统外,你必须 指定你的客户端 socket 将连接的在服务器系统上的端口。你能够直接使用 Port property 来 指定服务端口号。或者直接在 Service property 使用想得到的服务的名字。如果你指定端口 号和服务名,客户 socket 控件将使用服务名。 B.建立连接 一旦你在客户 socket 控件中完成了设置描述你想连接的服务器的属性,你就可以 进行连接,通过调用 Open 方法。如果你想你的应用启动时自动建立连接,在设计时设置 Active property 为 true,通过使用 Object Inspector 来设置。 C.取得关于连接的信息 完成连接到服务器 socket 后,你可以使用你的客户 socket 控件相关的客户 windows socket object 去取得关于连接的信息。使用 Socket property 去访问 client windows socket object。 windows socket object 有一个 properties,它能让你确定在连接的两端客户和服务器 使用的地址和端口号。 当使用一个 windows socket API 调用时,你可以使用 SocketHandle property 区获 得 socket 连接使用的 handle。你可以使用 Handle property 去访问 windows,以便接收来自 socket 连接的信息。 AsyncStyles property 决定哪种信息类型是 windows handle 要接收的。 D.关闭连接 当你完成通讯想关闭 socket 连接时,你能够通过调用 Close 方法来关闭连接。连 接可能要由服务器端来关闭。如果是这种情况,你将收到一个 OnDisconnect 事件的通知。 2.使用服务器 sockets 添加一个服务端 socket 控件 ServerSocket 到你的 form 或 data module 使你的应用 成为一个 TCP/IP 服务器。服务器 sockets 允许你指定你想提供的服务或你想用来监听客户 端请求时使用的端口。你可以使用服务器 socket 控件去监听和允许客户连接请求。每个服 务器 socket 控件使用一个单一的服务器 windows socket Object(TServerWinSocket)去应答在 服务器端监听到的连接。它通常使用一个服务器客户 winodws socket Object(TServerClientWinSocket)应答在服务器端每个活动的,连接着得到允许服务的客户 socket。使用服务器 sockets 去: A.指定端口 在你的服务器 socket 能够监听客户请求之前,你必须指定一个端口给你的监听服 务。你可以使用 Port property 来指定这个端口。如果你的服务器应用提供一个标准的服务, 这个服务使用一个习惯使用的相关联的端口。你能够使用 Service property 直接指定端口号。 使用 Service property 是一个好的主意,能够减少设置端口号时的错误。如果你既指定了 Port property,又指定了 Service property,服务 socket 将使用服务名。 B.监听客户请求 一旦你在 server socket 控件上设置好你的端口号,你就能够通过在运行时调用 Open 方法来监听一个连接。如果你希望你的应用程序能够在启动的时候自动监听连接,在 设计的时候通过使用 Object Inspector 设置 Active 属性为 true。 C.连接到客户端。 当服务端 socket 控件监听并接收到一个客户端连接请求时他们将自动接受这个请 求。当你每次收到通知时,OnClientConnetc 事件将发生。 D.取得关于连接的信息 一但你的服务器 socket 打开了监听连接,你能够使用与你的服务器 socket 控件相 关联的服务器 windows socket object 来取得关于连接的信息。使用 Socket property 去访问 server windows socket object。windows socket object 有一个属性能够让你找到关于所有活动 的客户 socket 连接,这些客户 socket 是你通过服务器 socket 控件允许连接的。使用 Handle 属性去存取 windows 通过 socket 连接收到的信息。 每个活动的,连接到客户应用是通过服务、客户 windows socket bject (TServerClientWinSocket)封装的。你能够通过 server windows socket object 的连接属性来访 问所有的这些。这些 server client windows socket object 有些属性让你能够决定哪些地址和 端口号给连接的两端-客户和服务器 socket 使用。当你使用 windows socket API 调用时,可 以使用 SocketHandle 属性去获得 socket 连接使用的 handle。你能够使用 Handle 属性去访 问 windows 从 socket 连接处得来的信息。AsyncStyles 属性决定 windows handle 将接收哪种 类型的信息。 E.关闭连接 当你决定关闭监听连接时,调用 Close 方法。这将关闭所有打开着的,连接到客 户应用的连接,取消任何尚未同意的连接,接着关闭监听连接以便你的服务 socket 控件不 在接受任何新的连接。当客户端关闭他们自己独立的连接到你的 server socket 的连接时, 你可以在 OnClientDisconnect 事件中得到讯息。 五、socket 事件的应答 当使用 sockets 写应用程序时,大多数工作发生在 socket 控件的 handler 事件中。 当通过 socket 连接开始读或写时 ,OnRead 和 OnWrite 事件在 non-blocking client sockets 中发 生从而通知 sockets.同样的, 服务器 sockets(blocking or non-blocking)收到 OnClientRead 和 OnClientWrite 事件 . 当服务器结束一个连接时,客户 scokets 收到一个 OnDisconnect 事件.当客户端结束 一个连接时,服务器 socket 收到一个 OnClientDisconnect 事件. 另外,客户端 Sockets 和服务器端 socket 从连接中收到一个错误信息时,都将产生一 个错误事件. 错误事件:客户 sockets 和服务器 sockets 通常会产生一个 OnError 事件,当他们从连 接中收到一个错误信息的时候.你能够写一个 OnError 事件处理去响应这些错误信息.这个 OnError 事件处理提供传送关于 socket 试图做什么的时候这个错误发生的信息,以及错误信 息提供的错误代码.你可以在 OnError 事件处理中对这个错误作出响应,并且把错误代码改为 0,以避免 socket 产生一个例外 . 当开始和完成事件发生时,socket 控件通常会收到一个事件号 (number of events).如 果你的应用程序需要改变 socket 开始操作的处理过程或通过连接开始读或写操作时 ,你将写 事件 handlers 去应答这些 client events 和 server events. A.client events 当一个客户 socket 打开一个连接时 ,以下事件发生: 1.一个 OnLookup 事件最先发生, 它试图去定位 server socket.在这里你不能改变 Host,Address,Port,Service 属性去改变你想定位的服务器.你能够使用 Socket 属性去访问 client windows socket object,并且使用它的 SocketHandle 属性去调用 windows API,以便改变 socket 的客户属性.例如,如果你想在客户应用软件中设置端口号 ,你必须在 server client 连接 前做这件事. 2.windows socket 设置和初始化事件通知. 3.当找到 server socket 一个 OnConnecting 事件发生 .在这事件中,windows Socket object 可以利用的是通过 socket 属性提供关于连接的另一端的服务 socket 的一些信息.这是 获得实际使用来连接的端口和 IP 地址的第一个机会,它可能不同于从监听 socket 处同意连 接时得到的端口或 IP 地址. 4.服务器同意连接请求,客户端 socket 完成连接. 5.当一个连接得到确定后,一个 OnConnect 事件发生.如果你的 socket 立即开始通过 连接读或写,就应写一个 OnConnect 事件 Handler 去作这件事 . B.服务器端事件(server events) 服务器 socket 控件通过两种方式连接 :监听连接和连接到客户应用 .服务器 socket 收到这两个连接的所有事件. 监听时事件 Delphi 的 Socket 编程要分几步? 当构成监听连接前,OnListen 事件发生.在这个时候你能够通过 socket 属性获得 server windows socket object.你能够使用它的 SocketHandle 属性去改变 socket,在 socket 打 开监听之前.例如, 如果你想限定监听服务使用的 IP 地址,你可以在这个 OnListen 事件 Handler 中做. 与客户端连接的事件 当一个服务器 socket 同意一个客户连接请求时 ,接下来的事件发生 : 1.服务器 socket 产生一个 OnGetSocket 事件,通过 windows socket handle 传送给连 接的另一端的 socket.如果你想提供自己定义的 TServerClientWinSocket of descendant,你可以 在 OnGetSocket 事件 handler 中建立,将被用来替代 TServerClientWinSocket. 2.一个 OnAccept 事件发生 ,传送新的 TServerClientWinSocket 对象给事件句柄.这是 第一个要点,当你使用 TServerClientWinSocket 的属性去获得被连接中服务的那端的客户的信 息时. 3.如果服务类型是 stThreadBlocking,一个 OnGetThread 事件发生。如果你想提供自 己定义的 TServerClientThread 子类,你可以在 OnGetThread 事件句柄中建立一个,它将替代 TServerClientThread. 4.如果服务类型是 stThreadBlocking,一个 OnThreadStart 事件发生。当这个线程 (thread)开始执行时.如果你想执行任何初始化这个线程 ,或调用一些 windows socket API 在这 线程开始通过连接读和写之前, 应该使用 OnThreadStart 事件句柄. 5.当客户端完成一个连接时,一个 OnClientConnect 事件发生.如果是 non-blocking 服 务,你可能想开始通过 socket 连接在这端进行读或写操作. 六、通过 Socket 连接进行读和写 通过 socket 连接到其他机器的原因是想通过这些连接来读和写信息.什么信息是你 要读和写的,或者当你想读和写时是依靠哪些 socket 连接的相关服务的 . 通过 sockets 进行读和写可以是异步的,所以在你的网络应用中不需要阻塞其他代 码的执行。这是调用 non-blocking connection.你也同样可以通过 blocking connection,这时你 的下一行代码的执行必须等到读或写操作完成. A.Non-blocking 连接,读和写是异步的 , 所以在你的网络应用中不需要阻塞其他代码的执行.建立一 个 Non-blocking 连接: 1.在客户 socket 中设置 ClientType 属性为 ctNonBlocking. 2.在服务器 socket 中设置 ServerType 属性为 stNonBlocking. 当连接是 non-blocking 时,连接的另一端企图读或写时读和写事件将把这个信息通 知你的 socket. 读和写操作事件 Non-blocking sockets 想通过连接读或写时, 它会产生一个读和写操作事件通知你的 socket.在客户端 sockets,你可以在 OnRead 或 OnWrite 事件句柄中对这些事件做出反应.在服 务器端 Scokets,可以在 OnClientRead 或 OnClientWrite 事件句柄中对这些事件做出反应.与 socket 连接相关联的 windows socket object 在事件句柄的读或写中被当作一个参数. Windows socket object 提供一个方法号 (number of methods)以允许你通过连接读或写. 通过 socket 连接读,使用 ReceiveBuf 或 ReceiveText 方法.在使用 ReceiveBuf 方法前, 使用 Receivelength 方法去确定在连接的另一端 socket 准备发送的字节数 (number of bytes). 通过 socket 连接写,使用 SendBuf,SendStream,或 SendText 方法.如果你通过 socket 发送信息后不再需要 socket 连接 ,你可以使用 SendStreamThenDrop 方法. SendStreamThenDrop 在写完所有的信息后将关闭 Socket 连接,它能够从 stream 读信息.如果 你使用 SendStream 或 SendStreamThenDrop 方法,不要释放 Stream object, socket 在连接结束 后会自动释放这个 Stream. 注意:SendStreamThenDrop 将关闭一个独立的客户连接服务 ,而不是监听连接. B.Blocking connections 当你使用的连接是 Blocking 时,你的 Socket 必须通过连接发起读或写操作,胜过被 动的等待从 socket 连接发来的通知 . 当你的连接末端的读和写操作发生改变时 使用 Blocking socket.对于客户端 sockets,设置 ClientType 属性为 ctBlocking 以便构 成一个 blocing connection.根据你的客户端应用想完成什么,你可能想建立一个执行线程去完 成读或写操作, 以便你的应用能够继续执行其他的线程, 当它在等待通过连接读或写操作的完 成. 对于服务器 sockets,设置 ServerType 属性为 stThreadBlocking 以便构成一个 blocking connection.因为 blocking connections 在等待通过连接读或写信息完成时挂起了其他 代码的执行,服务器 socket 控件通常产生一个新的执行线程给每一个客户连接 ,当 ServerType 设置为 stThreadBlocking 时.许多使用 Blocking 连接的应用都写使用线程(using threads.甚至 如果你不使用线程,你可能也想使用 TWinSocketStream 去读和写. 1)using threads 当使用一个 blocking connection 进行读或写操作时,客户 sockets 不会自动产生一个 新线程. 如果你的客户应用程序没有什么事做,直到读或写信息完成,那么这正是你想要的.如 果你的应用包括了一个用户界面,它还需要响应用户的操作,那么,你可能想产生一个独立的 线程去读写.当服务器 sockets 形成一个 blocking 连接时,他们常常产生独立的线程给每一个 客户连接,所以没有客户需要等待直到其他客户完成通过连接读或写操作.在默认情况下,服 务器 sockets 使用 TServerClientThread 对象去实现为每个连接执行不同的线程. TServerC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鲜食玉米产业助力乡村振兴路径研究
- 2024邮政行业职业技能鉴定预测复习及参考答案详解【综合题】
- 广东省医疗器械质量监督检验所招聘8人笔试备考题库含答案详解
- 2025自考专业(人力资源管理)考前冲刺测试卷附答案详解(基础题)
- 2024护士资格证试题及一套答案详解
- 2023年度民航职业技能鉴定通关题库附参考答案详解【完整版】
- 2025年期货从业资格之《期货法律法规》模考模拟试题附参考答案详解(综合卷)
- 教师招聘之《中学教师招聘》题库(得分题)打印附完整答案详解(易错题)
- 丁颜《鸽子的环》阅读答案
- 强化训练人教版7年级数学下册《平面直角坐标系》章节练习试题(含答案解析版)
- 电网工程设备材料信息参考价(2024年第四季度)
- 数据中心运维服务投标方案(技术标)
- BACTEC-FX血培养仪标准操作程序
- 《蛋白质组学》课件
- 3.新教材八上第三单元阅读综合实践
- 大学生劳动教育通论知到智慧树章节测试课后答案2024年秋大连海洋大学
- 2024版农业公司与个人农产品种植合作合同范本3篇
- 机器学习技术与应用 课件 第3课 协作机器人
- 【高分复习笔记】汪流《电影编剧学》(修订版)笔记和课后习题详解
- 神话故事民间故事《嫦娥奔月》绘本课件
- 人教部编版九年级语文上册《行香子》示范公开课教学课件
评论
0/150
提交评论