版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章TCP網(wǎng)絡(luò)程序開發(fā)3.1TCP程序開發(fā)主要技術(shù)3.2基于同步TCP的網(wǎng)絡(luò)聊天程序開發(fā)3.3基于異步TCP的網(wǎng)絡(luò)連天程序開發(fā)本章教學(xué)主要內(nèi)容3.1TCP程序開發(fā)主要技術(shù)3.1.1使用套接字進(jìn)行TCP傳輸3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸3.1.3同步和異步3.1.1使用套接字進(jìn)行TCP傳輸套接字分為兩種:一種是面向連接的(Connection-Oriented)另一種是無(wú)連接的(Connectionless)套接字,使用TCP協(xié)議編程的套接字是建立連接的。建立兩個(gè)IP地址端點(diǎn)之間的會(huì)話,一旦建立了這種連接就可以在設(shè)備之間進(jìn)行可靠傳輸。根據(jù)連接的啟動(dòng)方式和本地套接字要連接的目標(biāo),套接字的連接過(guò)程可分為三個(gè)階段:服務(wù)端監(jiān)聽、客戶端請(qǐng)求、確認(rèn)連接。
服務(wù)器監(jiān)聽:是指服務(wù)器套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。3.1.1使用套接字進(jìn)行TCP傳輸
客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器套接字的地址和端口號(hào),然后再向服務(wù)器套接字提出連接請(qǐng)求。
連接確認(rèn):是指當(dāng)服務(wù)器套接字監(jiān)聽到客戶端套接字的連接請(qǐng)求時(shí),它就響應(yīng)客戶端套接字的請(qǐng)求,把服務(wù)器套接字的信息發(fā)給客戶端,一旦客戶端確認(rèn)了此信息,連接即可建立。而服務(wù)器套接字繼續(xù)監(jiān)聽其他客戶端套接字的連接請(qǐng)求。建立連接 服務(wù)器端:SocketlocalSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); IPHostEntrylocal=Dns.GetHostByName(Dns.GetHostName());IPEndPointiep=newIPEndPoint(local.AddressList[0],1180); localSocket.Bind(iep); localSocket.Accept();3.1.1使用套接字進(jìn)行TCP傳輸3.1.1使用套接字進(jìn)行TCP傳輸 客戶端:PAddressremoteHost=IPAddress.Parse("");PEndPointiep=newIPEndPoint(remoteHost,1180);SocketlocalSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
localSocket.Connect(iep);3.1.1使用套接字進(jìn)行TCP傳輸 發(fā)送和接收消息 服務(wù)器端: SocketclientSocket=localSocket.Accept();//建立連接后,利用Send方法向客戶端發(fā)送信息 clientSocket.Send(Encoding.ASCII.GetBytes("serversendHello")); //接收客戶端信息 byte[]myresult=newByte[1024]; intreceiveNum=clientSocket.Receive(myresult); Console.WriteLine("接收客戶端消息:{0}",Encoding.ASCII.GetString(myresult));3.1.1使用套接字進(jìn)行TCP傳輸 客戶端 localSocket.Connect(iep);//建立連接成功后,向服務(wù)器發(fā)送信息stringsendMessage="clientsendMessageHello"+DateTime.Now;localSocket.Send(Encoding.ASCII.GetBytes(sendMessage));Console.WriteLine("向服務(wù)器發(fā)送消息:{0}",sendMessage);//接收服務(wù)器信息byte[]result=newByte[1024];3.1.1使用套接字進(jìn)行TCP傳輸localSocket.Receive(result);Console.WriteLine("接收服務(wù)器消息:{0}",Encoding.ASCII.GetString(result));關(guān)閉連接 localSocket.Shutdown(SocketShutdown.Both); localSocket.Close();3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸TcpClient類TcpClient類在System.Net.Socket命名空間下。主要用于編寫客戶端程序,且需要直接利用構(gòu)造函數(shù)創(chuàng)建TcpClient對(duì)象。而服務(wù)器端程序中是通過(guò)TcpListener對(duì)象的AcceptTcpClient方法得到TcpClient對(duì)象的,所以不需要使用TcpClient類的構(gòu)造函數(shù)來(lái)創(chuàng)建TcpClient對(duì)象。構(gòu)造函數(shù)有四種重載形式TcpClient()TcpClient(AddressFamilyfamily)TcpClient(IPEndPointiep)TcpClient(stringhostname,intport)3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸(1)TcpClient()該構(gòu)造函數(shù)創(chuàng)建一個(gè)默認(rèn)的TcpClient對(duì)象,并自動(dòng)分配本機(jī)(客戶端)IP地址和端口號(hào)。利用此構(gòu)造函數(shù)創(chuàng)建對(duì)象后,還必須調(diào)用Connect方法與服務(wù)器建立連接。例如:TcpClienttcpClient=newTcpClient();tcpClient.Connect("",51888);3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸(2)TcpClient(AddressFamilyfamily)該構(gòu)造函數(shù)創(chuàng)建的TcpClient對(duì)象也能自動(dòng)分配本機(jī)(客戶端)IP地址和端口號(hào),但是使用AddressFamily枚舉指定使用哪種網(wǎng)絡(luò)協(xié)議。創(chuàng)建該對(duì)象后,必須調(diào)用Connect方法與服務(wù)器建立連接。例如:TcpClienttcpClient=newTcpClient(AddressFamily.InterNetwork);tcpClient.Connect("",51888);3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸(3)TcpClient(IPEndPointiep)
該構(gòu)造函數(shù)的參數(shù)iep指定本機(jī)(客戶端)IP地址與端口號(hào)。當(dāng)客戶端有一個(gè)以上的IP地址時(shí),而且程序員希望直接指定使用的IP地址和端口號(hào),可以使用這種方式。如果使用這種方式,必須調(diào)用Connect方法與服務(wù)器建立連接。例如:IPAddress[]address=Dns.GetHostAddresses(Dns.GetHostName());IPEndPointiep=newIPEndPoint(address[0],51888);TcpClienttcpClient=newTcpClient(iep);tcpClient.Connect("",51888);3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸(4)TcpClient(stringhostname,intport)
這是使用最方便的一種構(gòu)造函數(shù)。參數(shù)中的hostname表示要連接到的遠(yuǎn)程主機(jī)的DNS名,port表示要連接到的遠(yuǎn)程主機(jī)的端口號(hào)。該構(gòu)造函數(shù)會(huì)自動(dòng)分配最合適的本地主機(jī)IP地址和端口號(hào),并對(duì)DNS進(jìn)行解析,然后與遠(yuǎn)程主機(jī)建立連接。例如:TcpClienttcpClient=newTcpClient("",51888);它相當(dāng)于:TcpClienttcpClient=newTcpClient();tcpClientConnect("",51888);3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸TcpClient類的常用屬性屬性含義Client獲取或設(shè)置基礎(chǔ)套接字LingerState獲取或設(shè)置有關(guān)套接字逗留時(shí)間的時(shí)間NoDelay獲取或設(shè)置一個(gè)值,該值在發(fā)送或接收緩沖區(qū)未滿時(shí)禁用延遲(true禁用延遲,默認(rèn)false)ReceiveBufferSize獲取或設(shè)置接收緩沖區(qū)的大?。J(rèn)8192字節(jié))ReceiveTimeout獲取或設(shè)置套接字接收數(shù)據(jù)的超時(shí)時(shí)間(毫秒)SendBufferSize獲取或設(shè)置發(fā)送緩沖區(qū)的大?。J(rèn)8192字節(jié))SendTimeout獲取或設(shè)置套接字發(fā)送數(shù)據(jù)的超時(shí)時(shí)間(毫秒)3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸TcpClient類的常用方法屬性含義Close釋放TcpClient實(shí)例,而不關(guān)閉基礎(chǔ)連接Connect
用指定的主機(jī)名和端口號(hào)將客戶端連接到TCP主機(jī)
BeginConnect
開始一個(gè)對(duì)遠(yuǎn)程主機(jī)連接的異步請(qǐng)求
EndConnect
異步接受傳入的連接嘗試
GetStream
獲取能夠發(fā)送和接收數(shù)據(jù)的NetworkStream對(duì)象
3.1.2使用TCP類進(jìn)行網(wǎng)絡(luò)傳輸TcpClient用法舉例:TcpClienttcpClient=newTcpClient();tcpClient.Connect("contosoServer",11000);NetworkStreamnetworkStream=tcpClient.GetStream();networkStream.ReadTimeout=10;byte[]bytes=newbyte[1024];networkStream.Read(bytes,0,1024);stringdata=Encoding.UTF8.GetString(bytes);networkStream.Close();tcpClient.Close();3.1.3同步和異步利用TCP開發(fā)應(yīng)用程序時(shí),.NET框架提供兩種工作方式,一種是同步工作方式(Syschronization),另一種是異步工作方式(Asynchronous)。 同步工作方式是指利用TCP編寫的程序執(zhí)行到監(jiān)聽或就收語(yǔ)句時(shí),在未完成當(dāng)前工作(偵聽到連接請(qǐng)求或收到對(duì)方發(fā)來(lái)的數(shù)據(jù))前不在往繼續(xù)往下執(zhí)行。 異步工作方式是指程序執(zhí)行到監(jiān)聽或接收語(yǔ)句時(shí),不論當(dāng)前工作是否完成,都會(huì)繼續(xù)往下執(zhí)行。
3.1.3同步和異步
使用同步TCP編寫服務(wù)器端程序的一般步驟為:創(chuàng)建一個(gè)包含采用的網(wǎng)絡(luò)類型、數(shù)據(jù)傳輸類型和協(xié)議類型的本地套接字對(duì)象,并將其與服務(wù)器的IP地址和端口號(hào)綁定。這個(gè)過(guò)程可以通過(guò)Socket類或者TcpListener類完成。在指定的端口進(jìn)行監(jiān)聽,以便接受客戶端連接請(qǐng)求。 一旦接受了客戶端的連接請(qǐng)求,就根據(jù)客戶端發(fā)送的連接信息創(chuàng)建與該客戶端對(duì)應(yīng)的Socket對(duì)象或者TcpClient對(duì)象。根據(jù)創(chuàng)建的Socket對(duì)象或者TcpClient對(duì)象,分別與每個(gè)連接的客戶進(jìn)行數(shù)據(jù)傳輸。根據(jù)傳送信息情況確定是否關(guān)閉與對(duì)方的連接。3.1.3同步和異步使用異步TCP編寫客戶端程序的一般步驟為:創(chuàng)建一個(gè)包含傳輸過(guò)程中采用的網(wǎng)絡(luò)類型、數(shù)據(jù)傳輸類型和協(xié)議類型的Socket對(duì)象或者TcpClient對(duì)象。使用Connect方法與遠(yuǎn)程服務(wù)器建立連接。與服務(wù)器進(jìn)行數(shù)據(jù)傳輸。完成工作后,向服務(wù)器發(fā)送關(guān)閉信息,并關(guān)閉與服務(wù)器的連接。3.2基于同步TCP的網(wǎng)絡(luò)聊天程序開發(fā)3.2.1功能介紹及界面設(shè)計(jì)3.2.2服務(wù)器程序編寫3.2.3客戶端程序編寫3.2.1功能介紹及界面設(shè)計(jì)界面設(shè)計(jì) 服務(wù)器界面設(shè)計(jì)3.2.1功能介紹及界面設(shè)計(jì) 客戶端設(shè)計(jì)界面3.2.1功能介紹及界面設(shè)計(jì)功能介紹服務(wù)器端運(yùn)行后點(diǎn)擊啟動(dòng)監(jiān)聽按鈕,監(jiān)聽有無(wú)試圖連接到本機(jī)的客戶端,當(dāng)偵聽到有連接到本機(jī)的客戶端并且連接成功后,服務(wù)器提示有客戶端登陸,并且服務(wù)器想客戶端發(fā)送“歡迎登陸”的歡迎消息。服務(wù)器端的listBox1上顯示所有連接到他的客戶端,并且服務(wù)器可以選擇任意連接到他的客戶端進(jìn)行聊天。3.2.1功能介紹及界面設(shè)計(jì)運(yùn)行效果3.2.2服務(wù)器程序編寫創(chuàng)建一個(gè)監(jiān)聽類接受和處理服務(wù)器的連接請(qǐng)求。因?yàn)楫?dāng)客戶端連接成功后,服務(wù)器端要向客戶端發(fā)送歡迎消息,所以服務(wù)器的監(jiān)聽類還必須處理向客戶端發(fā)送歡迎消息服務(wù)器還要能夠向和客戶端聊天,創(chuàng)建一個(gè)發(fā)送類用于向客戶端發(fā)送聊天消息。在Windows窗體應(yīng)用程序中,用戶要有必要的輸入和操作,所以在窗體類中必須也要能夠?qū)崿F(xiàn)相應(yīng)的功能3.2.3客戶端程序編寫 客戶端與服務(wù)器端基本一樣,都要有相應(yīng)的監(jiān)聽類來(lái)監(jiān)聽和接收服務(wù)器端發(fā)送過(guò)來(lái)的信息,也要有相應(yīng)的發(fā)送類向服務(wù)器發(fā)送消息和窗體類來(lái)處理用戶的輸入和操作。3.3基于異步TCP的聊天程序開發(fā)
3.3.1異步程序編程方法 3.3.2界面設(shè)計(jì) 3.3.3服務(wù)器端程序編寫 3.3.4客戶端程序編寫3.3.1異步程序編程方法使用異步TCP編程時(shí),除了套接字有對(duì)應(yīng)的異步操作方式外,TcpListener和TcpClient類均提供了返回結(jié)果為IasyncResult類型的異步操作的方法。見(jiàn)下頁(yè)表。3.3.1異步程序編程方法類提供的方法說(shuō)明TcpListenerBeginAcceptTcpClient開始一個(gè)異步操作接受一個(gè)傳入的連接嘗試EndAcceptTcpClient異步接受傳入的連接嘗試,并創(chuàng)建新的TcpClient處理遠(yuǎn)程主機(jī)通信TcpClientBeginConnect開始一個(gè)對(duì)遠(yuǎn)程主機(jī)連接的異步請(qǐng)求EndConnect異步接受傳入的連接嘗試SocketBeginReceive開始從連接的Socket中異步接收數(shù)據(jù)EndReceive結(jié)束掛起的異步讀取BeginSend將數(shù)據(jù)異步發(fā)送到連接的SocketEndSend結(jié)束掛起的異步發(fā)送3.3.1異步程序編程方法1.BeginAcceptTcpClient方法和EndAcceptTcpClient方法回調(diào)方法中傳遞的參數(shù)只有一個(gè),而且必須是IAsyncResult類型的接口,它表示異步操作的狀態(tài),如果有多個(gè)狀態(tài)需要傳遞,可以將其事先封裝到某個(gè)類中
AsyncCallbackcallback=newAsyncCallback(AcceptClient); tcpListener.BeginAcceptTcpClient(callback,tcpListener); …. voidAcceptClient(IAsyncResultar) { …TcpListenermyListener=(TcpListener)ar.AsyncState;TcpClientclient=myListener.EndAcceptTcpClient(ar);…}3.3.1異步程序編程方法1.BeginAcceptTcpClient方法和EndAcceptTcpClient方法程序執(zhí)行BeginAcceptTcpClient方法后,會(huì)立即在線程池中自動(dòng)創(chuàng)建一個(gè)線程,同時(shí)在該線程中監(jiān)聽客戶端連接請(qǐng)求。一旦接受了客戶端連接請(qǐng)求,就通過(guò)委托執(zhí)行相應(yīng)的方法,并返回狀態(tài)信息。 publicIAsyncResultBeginAcceptTcpClient(AsyncCallbackcallback,Objectstate)參數(shù)1:AsyncCallback類型的委托,參數(shù)2:Object類型,用于將狀態(tài)信息傳遞給委托調(diào)用的方法。3.3.1異步程序編程方法2.BeginConnect方法和EndConnect方法
在BeginConnect方法操作完成前,調(diào)用該方法的線程不會(huì)阻塞,系統(tǒng)會(huì)自動(dòng)用獨(dú)立的線程來(lái)執(zhí)行該方法,直到與遠(yuǎn)程主機(jī)連接成功或拋出異常。publicIAsyncResult
BeginConnect(IPAddressaddress, intport,AsyncCallbackrequestCallback,Objectstate);參數(shù):address為遠(yuǎn)程主機(jī)的IPAddress對(duì)象; port為遠(yuǎn)程主機(jī)的端口號(hào); requestCallback為AsyncCallback類型的委托; state為包含連接操作的相關(guān)信息,當(dāng)操作完成時(shí),此對(duì)象會(huì)被傳遞給requestCallback委托。3.3.1異步程序編程方法2.BeginConnect方法和EndConnect方法…AsyncCallbackrequestCallback=newAsyncCallback(FinishConnect);tcpClient.BeginConnect(遠(yuǎn)程主機(jī)IP或域名,遠(yuǎn)程主機(jī)端口號(hào),requestCallback,tcpClient);…voidFinishConnect(IAsyncResultar){…tcpClient=(TcpClient)ar.AsyncState;client.EndConnect(ar);…}在自定義的FinishConnect方法中,通過(guò)獲取的狀態(tài)信息得到新的TcpClient類型的對(duì)象,并調(diào)用EndConnect完成連接請(qǐng)求。3.3.1異步程序編程方法3.異步發(fā)送和接收數(shù)據(jù)publicoverrideIAsyncResultBeginWrite(byte[]buffer,intoffset,intsize,AsyncCallbackcallback,Objectstate);publicoverrideIAsyncResultBeginRead(byte[]buffer,intoffset,intsize,AsyncCallbackcallback,Objectstate);(1)buffer為字節(jié)數(shù)組,表示用來(lái)存放要發(fā)送的數(shù)據(jù),從NetworkStream讀取的數(shù)據(jù);(2)offset用來(lái)存放發(fā)送或讀取的數(shù)據(jù)在緩沖區(qū)中的起始位置;(3)size用來(lái)存放發(fā)送或接收數(shù)據(jù)的字節(jié)數(shù);(4)callback是異步回調(diào)類型的委托(5)state包含狀態(tài)信息。3.3.2界面設(shè)計(jì)服務(wù)器端客戶端3.3.3服務(wù)器端程序編寫
1.在監(jiān)聽類中聲明一個(gè)委托ReceiveMessageDelegate用來(lái)異步接收客戶端的連接請(qǐng)求,并且寫出相應(yīng)的回調(diào)方法處理請(qǐng)求和消息。privatedelegatevoidReceiveMessageDelegate(outstringreceiveMessage);privateReceiveMessageDelegatereceiveMessageDelegate;//調(diào)用異步方法處理客戶端發(fā)送過(guò)來(lái)的連接請(qǐng)求和信息receiveMessageDelegate=newReceiveMessageDelegate(ReceiveMessage);//異步操作2IAsyncResultresult=receiveMessageDelegate.BeginInvoke(outreceiveString,null,null);3.3.3服務(wù)器端程序編寫
receiveMessageDelegate.EndInvoke(outreceiveString,result);其中ReceiveMessage是回調(diào)方法,用來(lái)處理客戶端的連接請(qǐng)求在發(fā)送類中聲明一個(gè)委托SendMessageDelegate用來(lái)異步發(fā)送消息給客戶端,并且寫出相應(yīng)的回調(diào)方法發(fā)送消息給客戶端。//聲明委托privatedelegatevoidSendMessageDelegate(stringsendMessage);privateSendMessageDelegatesendMessageDelegate;//調(diào)用異步方法向客戶端發(fā)送數(shù)據(jù)sendMessageDelegate=newSendMessageDelegate(SendMessage);//異步操作3IAsyncResultresult=sendMessageDelegate.BeginInvoke(str.ToString(),null,null);sendMessageDelegate.EndInvoke(result);其中SendMessage是回調(diào)方法,用來(lái)向客戶端發(fā)送消息3.3.4客戶端程序編寫
1.在監(jiān)聽類中聲明一個(gè)委托ReceiveMessageDelegate用來(lái)異步接收客戶端的連接請(qǐng)求,并且寫出相應(yīng)的回調(diào)方法處理請(qǐng)求和消息//聲明委托privatedelegatevoidReceiveMessageDelegate(outstringreceiveMessage);privateReceiveMessageDelegatereceiveMessageDelegate;//調(diào)用異步方法處理客戶端發(fā)送過(guò)來(lái)的連接請(qǐng)求和信息receiveMessageDelegate=newReceiveMessageDelegate(ReceiveMessage);//異步操作2IAsyncResultresult=receiveMessageDelegate.BeginInvoke(outreceiveString,null,nul
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年金融機(jī)構(gòu)與中小企業(yè)公對(duì)公信用貸款合同3篇
- 美食廣場(chǎng)食品安全檢測(cè)制度
- 交通運(yùn)輸設(shè)備采購(gòu)招投標(biāo)流程
- 網(wǎng)絡(luò)安全防護(hù)指南
- 填筑土方施工合同
- 倉(cāng)儲(chǔ)物流中心續(xù)租合同
- 2024年水電設(shè)備安全認(rèn)證與檢測(cè)服務(wù)合同3篇
- 金融行業(yè)總監(jiān)理合同模板
- 房屋共同使用權(quán)保險(xiǎn)合同
- 醫(yī)療設(shè)備采購(gòu)項(xiàng)目承攬
- 2024年臨汾翼城縣就業(yè)困難高校畢業(yè)生公益性崗招考聘用70人重點(diǎn)基礎(chǔ)提升難、易點(diǎn)模擬試題(共500題)附帶答案詳解
- 農(nóng)產(chǎn)品電子商務(wù)智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- 羽毛球教學(xué)與實(shí)戰(zhàn)智慧樹知到期末考試答案章節(jié)答案2024年阜陽(yáng)師范大學(xué)
- 2024屆廣東省深圳市羅湖區(qū)中考適應(yīng)性考試化學(xué)試題含解析
- 醫(yī)保信息系統(tǒng)管理制度范文
- 停車場(chǎng)服務(wù)培訓(xùn)課件
- 《工業(yè)數(shù)據(jù)采集技術(shù)》課程標(biāo)準(zhǔn)
- 半導(dǎo)體芯片知識(shí)講座
- 智慧農(nóng)業(yè)的無(wú)人機(jī)與遙感技術(shù)
- 河北省石家莊市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量檢測(cè)生物試題(含答案解析)
- 蘇教版三年級(jí)上冊(cè)豎式計(jì)算練習(xí)300題及答案
評(píng)論
0/150
提交評(píng)論