




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
QT5開發及實例(第5版)第10章Qt5網絡通信及實例——獲取本機網絡信息獲取本機網絡信息【例】(簡單)(CH1001)獲得本機網絡信息。以“直接編寫代碼”(即取消勾選“Generateform”復選框)方式創建Qt項目,項目名NetworkInformation,“ClassInformation”頁基類選“QWidget”,類名命名為“NetworkInformation”。1.實現界面(1)頭文件networkinformation.h代碼如下。#include<QWidget>#include<QLabel>#include<QPushButton>#include<QLineEdit>#include<QGridLayout>#include<QMessageBox>classNetworkInformation:publicQWidget{Q_OBJECTpublic:NetworkInformation(QWidget*parent=0);~NetworkInformation();private:QLabel*hostLabel;QLineEdit*LineEditLocalHostName;QLabel*ipLabel;QLineEdit*LineEditAddress;QPushButton*detailBtn;QGridLayout*mainLayout;};獲取本機網絡信息(2)源文件networkinformation.cpp代碼如下:#include"networkinformation.h"NetworkInformation::NetworkInformation(QWidget*parent):QWidget(parent){hostLabel=newQLabel("主機名:");LineEditLocalHostName=newQLineEdit;ipLabel=newQLabel("IP地址:");LineEditAddress=newQLineEdit;detailBtn=newQPushButton("詳細");mainLayout=newQGridLayout(this);mainLayout->addWidget(hostLabel,0,0);mainLayout->addWidget(LineEditLocalHostName,0,1);mainLayout->addWidget(ipLabel,1,0);mainLayout->addWidget(LineEditAddress,1,1);mainLayout->addWidget(detailBtn,2,0,1,2);}獲取本機網絡信息此時,運行程序顯示界面如圖。獲取本機網絡信息2.獲取信息下面實現獲取本機網絡信息的功能。(1)在項目的配置文件NetworkI中添加一句:QT+=network(2)在頭文件networkinformation.h中添加如下代碼:#include<QHostInfo>#include<QNetworkInterface>public:voidgetHostInformation();publicslots:voidslotDetail();獲取本機網絡信息(3)實現功能函數和槽函數在源文件networkinformation.cpp構造函數的最后添加:getHostInformation();connect(detailBtn,SIGNAL(clicked()),this,SLOT(slotDetail()));功能函數getHostInformation()用于獲取主機信息,實現代碼如下:voidNetworkInformation::getHostInformation(){QStringlocalHostName=QHostInfo::localHostName(); //(a)LineEditLocalHostName->setText(localHostName);QHostInfohostInfo=QHostInfo::fromName(localHostName); //(b)//獲取主機的IP地址列表QList<QHostAddress>listAddress=hostInfo.addresses();if(!listAddress.isEmpty()) //(c){LineEditAddress->setText(listAddress.at(1).toString());}}獲取本機網絡信息槽函數slotDetail()獲取與網絡接口相關的信息,實現代碼如下:voidNetworkInformation::slotDetail(){QStringdetail="";QList<QNetworkInterface>list=QNetworkInterface::allInterfaces(); //(a)for(inti=0;i<list.count();i++){QNetworkInterfaceinterface=list.at(i);detail=detail+"設備:"+()+"\n"; //(b)detail=detail+"硬件地址:"+interface.hardwareAddress()+"\n"; //(c)QList<QNetworkAddressEntry>entryList=interface.addressEntries(); //(d)for(intj=1;j<entryList.count();j++){QNetworkAddressEntryentry=entryList.at(j);detail=detail+"\t"+"IP地址:"+entry.ip().toString()+"\n";detail=detail+"\t"+"子網掩碼:"+mask().toString()+"\n";detail=detail+"\t"+"廣播地址:"+entry.broadcast().toString()+"\n";}}QMessageBox::information(this,"Detail",detail);}獲取本機網絡信息(4)運行程序啟動程序,顯示本機網絡基本信息如圖。單擊“詳細”按鈕,彈出如圖網絡詳細信息窗口。QT5開發及實例(第5版)第10章Qt5網絡通信及實例——基于UDP的數據通信01UDP工作原理1.UDP簡介2.UDP編程步驟UDP工作原理1.UDP簡介UDP(UserDatagramProtocol,用戶數據報協議)是一種簡單、輕量、無連接的傳輸協議,可以用在對通信可靠性要求不是很高的場合,如以下幾種情形:
網絡數據大多為短消息。
系統擁有大量客戶端。
對數據安全性無特殊要求。
網絡負載很重,但對響應速度卻要求極高。UDP所收發數據的形式是報文(Datagram),通信時UDP客戶端向UDP服務器發送一定長度的請求報文,報文大小的限制與各系統的協議實現有關,但不得超過其下層IP規定的64KB,UDP服務器同樣以報文做出應答,如圖。UDP工作原理在UDP方式下,客戶端并不與服務器建立連接,它只負責調用發送函數向服務器發出數據報。類似地,服務器也不接受客戶端的連接,只是調用接收函數被動等待來自某客戶端的數據到達。UDP客戶端與UDP服務器間的交互時序如圖。UDP工作原理2.UDP編程步驟(1)初始化套接字例如,在一個即時通訊系統中,用戶之間的文字聊天信息、所有的系統協調通知消息都以UDP收發。為此,在客戶端和服務器程序的初始化代碼中,都要創建一個QUdpSocket對象綁定到指定端口,并將該對象的readyRead信號關聯到接收數據報的recvData函數,語句如下:QUdpSocket*udpsocket=newQUdpSocket(); //創建套接字對象intuport=23232; //(a)udpsocket->bind(uport,QUdpSocket::BindFlag::ShareAddress|QUdpSocket::BindFlag::ReuseAddressHint); //套接字綁定到端口connect(udpsocket,SIGNAL(readyRead()),this,SLOT(recvData())); //(b)UDP工作原理(2)發送數據在初始化套接字后,通信雙方都可以調用套接字對象的writeDatagram函數發送數據,語句形如:套接字對象->writeDatagram(數據,地址,UDP端口號);(3)接收數據當有數據到達時,接收方程序響應QUdpSocket的readyRead信號,一旦套接字對象中有數據可讀,即通過readDatagram函數將其讀出,代碼形如:while(套接字對象->hasPendingDatagrams()) //(a){
套接字對象->readDatagram(數據,套接字對象->pendingDatagramSize()); //(b)...... //對收到的數據進行處理}02UDP應用實例1.UDP服務器編程2.UDP客戶端編程3.運行演示UDP應用實例【例】(簡單)(CH1002)編寫一對服務器/客戶端程序,用UDP進行字符的收發并顯示。1.UDP服務器編程以“直接編寫代碼”(即取消勾選“Generateform”復選框)方式創建Qt項目,項目名UdpServer,“ClassInformation”頁基類選“QDialog”,類名命名為“UdpServer”。1)實現界面(1)在頭文件udpserver.h中聲明需要的各種控件,代碼如下:#include<QDialog>#include<QLabel>#include<QLineEdit>#include<QPushButton>#include<QVBoxLayout>classUdpServer:publicQDialog{Q_OBJECTpublic:UdpServer(QWidget*parent=0,Qt::WindowFlagsf=0);~UdpServer();private:QLabel*TimerLabel;QLineEdit*TextLineEdit;QPushButton*StartBtn;QVBoxLayout*mainLayout;};UDP應用實例(2)在源文件udpserver.cpp中布局程序界面,代碼如下:#include"udpserver.h"UdpServer::UdpServer(QWidget*parent,Qt::WindowFlagsf):QDialog(parent,f){setWindowTitle("UDPServer"); //設置窗口標題/*初始化各個控件*/TimerLabel=newQLabel("計時器:",this);TextLineEdit=newQLineEdit(this);StartBtn=newQPushButton("開始",this);/*設置布局*/mainLayout=newQVBoxLayout(this);mainLayout->addWidget(TimerLabel);mainLayout->addWidget(TextLineEdit);mainLayout->addWidget(StartBtn);}此時,運行程序顯示服務器界面如圖。UDP應用實例2)完成發送數據功能(1)在項目的配置文件UdpS中添加一句:QT+=network(2)在頭文件udpserver.h中添加需要的槽函數并聲明變量,如下:#include<QUdpSocket>#include<QTimer>publicslots:voidStartBtnClicked();voidtimeout();private:intport;boolisStarted;QUdpSocket*udpSocket;QTimer*timer;UDP應用實例(3)實現槽函數在源文件udpserver.cpp中包含:#include<QHostAddress>并在構造函數中添加如下代碼:connect(StartBtn,SIGNAL(clicked()),this,SLOT(StartBtnClicked()));port=5555; //設置UDP的端口號參數,服務器定時向此端口發送廣播消息isStarted=false;udpSocket=newQUdpSocket(this); //創建套接字對象timer=newQTimer(this); //創建一個定時器//定時發送廣播消息connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));UDP應用實例槽函數StartBtnClicked()負責啟停發送,代碼如下:voidUdpServer::StartBtnClicked(){if(!isStarted){StartBtn->setText("停止");timer->start(1000);isStarted=true;}else{StartBtn->setText("開始");isStarted=false;timer->stop();}}UDP應用實例槽函數timeout()實現了發送廣播消息的功能,代碼如下:voidUdpServer::timeout(){QStringmsg=TextLineEdit->text();intlength=0;if(msg==""){return;}if((length=udpSocket->writeDatagram(msg.toLatin1(),msg.length(),QHostAddress::Broadcast,port))!=msg.length()){return;}}UDP應用實例2.UDP客戶端編程以“直接編寫代碼”(即取消勾選“Generateform”復選框)方式創建Qt項目,項目名UdpClient,“ClassInformation”頁基類選“QDialog”,類名命名為“UdpClient”。1)實現界面(1)在頭文件udpclient.h中聲明需要的各種控件,代碼如下:#include<QDialog>#include<QVBoxLayout>#include<QTextEdit>#include<QPushButton>classUdpClient:publicQDialog{Q_OBJECTpublic:UdpClient(QWidget*parent=0,Qt::WindowFlagsf=0);~UdpClient();private:QTextEdit*ReceiveTextEdit;QPushButton*CloseBtn;QVBoxLayout*mainLayout;};UDP應用實例(2)在源文件udpclient.cpp中布局程序界面,代碼如下:#include"udpclient.h"UdpClient::UdpClient(QWidget*parent,Qt::WindowFlagsf):QDialog(parent,f){setWindowTitle("UDPClient"); //設置窗口標題/*初始化各個控件*/ReceiveTextEdit=newQTextEdit(this);CloseBtn=newQPushButton("Close",this);/*設置布局*/mainLayout=newQVBoxLayout(this);mainLayout->addWidget(ReceiveTextEdit);mainLayout->addWidget(CloseBtn);}運行程序顯示客戶端界面如圖。UDP應用實例2)完成接收數據功能(1)在項目的配置文件UdpC中添加一句:QT+=network(2)在頭文件udpclient.h中添加需要的槽函數并聲明變量,如下:#include<QUdpSocket>publicslots:voidCloseBtnClicked();voiddataReceived();private:intport;QUdpSocket*udpSocket;UDP應用實例(3)實現槽函數在源文件udpclient.cpp中包含:#include<QMessageBox>#include<QHostAddress>并在構造函數中添加如下代碼:connect(CloseBtn,SIGNAL(clicked()),this,SLOT(CloseBtnClicked()));port=5555; //設置UDP的端口號參數,指定在此端口上監聽數據udpSocket=newQUdpSocket(this); //創建套接字對象connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));boolresult=udpSocket->bind(port); //將套接字綁定到指定的端口上if(!result){QMessageBox::information(this,"error","udpsocketcreateerror!");return;}UDP應用實例槽函數CloseBtnClicked()只是簡單地關閉客戶端窗口:voidUdpClient::CloseBtnClicked(){close();}槽函數dataReceived()響應QUdpSocket的readyRead()信號,一旦套接字對象中有數據可讀時,即通過readDatagram()方法將數據讀出并顯示,代碼如下:voidUdpClient::dataReceived(){while(udpSocket->hasPendingDatagrams()){QByteArraydatagram;datagram.resize(udpSocket->pendingDatagramSize());udpSocket->readDatagram(datagram.data(),datagram.size());QStringmsg=datagram.data();ReceiveTextEdit->insertPlainText(msg); //顯示數據內容}}UDP應用實例3.運行演示(1)同時啟動運行服務器和客戶端程序。(2)在服務器界面的文本框中輸入“hello!”,然后單擊“開始”按鈕,按鈕文本變為“停止”,客戶端就開始不斷地收到“hello!”字符消息并顯示在文本區。(3)當單擊服務器的“停止”按鈕后,按鈕文本又變回“開始”,客戶端也停止了字符的顯示。(4)再次單擊服務器的“開始”按鈕,客戶端又繼續接收并顯示……如此循環往復。整個演示過程的運行效果如圖。QT5開發及實例(第5版)第10章Qt5網絡通信及實例——基于TCP的數據通信01TCP工作原理1.TCP簡介2.TCP編程步驟TCP工作原理1.TCP簡介TCP(TransmissionControlProtocol,傳輸控制協議)是一種可靠、面向數據流且需要建立連接的傳輸協議,許多高層應用協議(包括HTTP、FTP等)都以它為基礎,TCP非常適合數據的連續傳輸。一個典型的TCP傳輸文件的過程如下:(1)首先啟動服務器,一段時間后啟動客戶端,它與此服務器經過三次握手后建立連接。(2)此后的一段時間內,客戶端向服務器發送一個請求,服務器處理這個請求,并為客戶端發回一個響應。這個過程一直持續下去,直到客戶端向服務器發一個文件結束符,并關閉客戶端連接。(3)接著服務器也關閉服務器端的連接,結束運行或等待一個新的客戶端連接。TCP工作原理TCP客戶端與TCP服務器間的交互時序如圖。TCP工作原理TCP與UDP的比較見表。比較項TCPUDP是否連接面向連接無連接傳輸可靠性可靠不可靠流量控制提供不提供工作方式全雙工可以是全雙工應用場合大量數據少量數據速度慢快TCP工作原理2.TCP編程步驟(1)創建TCP服務器和套接字在服務器程序的初始化代碼中,既要創建一個TCP服務器對象也要創建一個套接字對象,語句如下:QTcpServer*tcpserver=newQTcpServer(); //創建TCP服務器inttport=5555 ; //TCP監聽端口號connect(tcpserver,SIGNAL(newConnection()),this,SLOT(preTrans())); //(a)intpayloadsize=64*1024; //緩存每次收發的字節數QTcpSocket*tcpsocket=newQTcpSocket(); //創建套接字對象connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(recvBytes())); //(b)intbytesrecved=0; //已接收的字節數TCP工作原理(2)建立連接及準備首先,由TCP客戶端向服務器主動發起連接請求,使用語句:tcpsocket->connectToHost(地址,端口);這里的“端口”是TCP服務器上的監聽端口。接受連接后,再由TCP服務器完成傳輸前的準備工作并啟動傳輸,這個操作是在preTrans函數中進行的,以傳輸文件為例,代碼如下://準備工作socket=tcpserver->nextPendingConnection();connect(socket,SIGNAL(bytesWritten()),this,SLOT(handleTrans()));localfile->open(QFile::OpenModeFlag::ReadOnly); //只讀模式打開文件//啟動傳輸block=localfile->read(payloadsize); //讀取一個緩存塊bytestobesend-=socket->write(block); //寫入套接字TCP工作原理(3)TCP服務器發送數據在handleTrans函數中實現字節流的持續發送,代碼為://進入TCP傳輸過程if(bytestobesend>0){if(bytestobesend>payloadsize){block=localfile->read(payloadsize); //每次讀入一個緩存塊}else{ //讀取最后剩余的字節block=localfile->read(bytestobesend);}bytestobesend-=socket->write(block); //寫入套接字}else{localfile->close(); //關閉文件socket->abort(); //釋放套接字tcpserver->close(); //關閉TCP服務器}TCP工作原理(4)TCP客戶端接收數據在TCP連接建立并啟動傳輸后,客戶端套接字就一直由readyRead信號所驅動而處于被動接收字節的狀態,該信號關聯的recvBytes函數實現對字節的接收和控制,代碼為:if(bytesrecved<bytestotal){bytesrecved+=tcpsocket->bytesAvailable();block=tcpsocket->readAll(); //每次接收一個緩存塊localfile->write(block);if(bytesrecved==bytestotal){localfile->close(); //關閉文件tcpsocket->abort(); //釋放套接字bytesrecved=0; //復位...... //后續處理}}02TCP應用實例1.TCP服務器編程2.TCP客戶端編程3.運行演示TCP應用實例【例】(難度中等)(CH1003)實現一個基于TCP的網絡聊天室應用。1.TCP服務器編程以“直接編寫代碼”(即取消勾選“Generateform”復選框)方式創建Qt項目,項目名TcpServer,“ClassInformation”頁基類選“QDialog”,類名命名為“TcpServer”。1)實現界面(1)在頭文件tcpserver.h中聲明需要的各種控件,代碼如下:#include<QDialog>#include<QListWidget>#include<QLabel>#include<QLineEdit>#include<QPushButton>#include<QGridLayout>classTcpServer:publicQDialog{Q_OBJECTpublic:TcpServer(QWidget*parent=0,Qt::WindowFlagsf=0);~TcpServer();private:QListWidget*ContentListWidget;QLabel*PortLabel;QLineEdit*PortLineEdit;QPushButton*CreateBtn;QGridLayout*mainLayout;};TCP應用實例(2)在源文件tcpserver.cpp中布局程序界面,代碼如下:#include"tcpserver.h"TcpServer::TcpServer(QWidget*parent,Qt::WindowFlagsf):QDialog(parent,f){setWindowTitle("TCPServer");ContentListWidget=newQListWidget;PortLabel=newQLabel("端口:");PortLineEdit=newQLineEdit;CreateBtn=newQPushButton("創建聊天室");mainLayout=newQGridLayout(this);mainLayout->addWidget(ContentListWidget,0,0,1,2);mainLayout->addWidget(PortLabel,1,0);mainLayout->addWidget(PortLineEdit,1,1);mainLayout->addWidget(CreateBtn,2,0,1,2);}TCP應用實例運行程序顯示服務器界面如圖。TCP應用實例2)完成聊天室服務器端功能(1)創建TCP套接字類在項目中添加C++類TcpClientSocket繼承自QTcpSocket,作為套接字在服務器端實現與客戶端程序的通信。套接字類頭文件tcpclientsocket.h的代碼為:#include<QTcpSocket>#include<QObject>classTcpClientSocket:publicQTcpSocket{Q_OBJECT//添加宏(Q_OBJECT)是為了實現信號與槽的通信public:TcpClientSocket(QObject*parent=0);signals:voidupdateClients(QString,int);voiddisconnected(int);protectedslots:voiddataReceived();voidslotDisconnected();};TCP應用實例在套接字類源文件tcpclientsocket.cpp的構造函數中關聯信號與槽:#include"tcpclientsocket.h"TcpClientSocket::TcpClientSocket(QObject*parent){connect(this,SIGNAL(readyRead()),this,SLOT(dataReceived()));connect(this,SIGNAL(disconnected()),this,SLOT(slotDisconnected()));}TCP應用實例其中,disconnected()信號在斷開連接時發出。當有數據到來時,觸發槽函數dataReceived(),代碼如下:voidTcpClientSocket::dataReceived(){while(bytesAvailable()>0){intlength=bytesAvailable();charbuf[1024];read(buf,length);QStringmsg=buf;emitupdateClients(msg,length);}}該函數從套接字中將有效數據取出,然后發出updateClients()信號,此信號是通知服務器向聊天室內的所有成員廣播消息。槽函數slotDisconnected()的代碼為:voidTcpClientSocket::slotDisconnected(){emitdisconnected(this->socketDescriptor());}TCP應用實例(2)創建TCP服務器類在項目中添加C++類Server繼承自QTcpServer,作為TCP服務器監聽指定端口的TCP連接請求。服務器類頭文件server.h的代碼為:#include<QTcpServer>#include<QObject>#include"tcpclientsocket.h" //包含TCP套接字classServer:publicQTcpServer{Q_OBJECT //添加宏(Q_OBJECT)是為了實現信號與槽的通信public:Server(QObject*parent=0,intport=0);QList<TcpClientSocket*>tcpClientSocketList;signals:voidupdateServer(QString,int);publicslots:voidupdateClients(QString,int);voidslotDisconnected(int);protected:voidincomingConnection(intsocketDescriptor);};TCP應用實例在服務器類源文件server.cpp的構造函數中開啟監聽:#include"server.h"Server::Server(QObject*parent,intport):QTcpServer(parent){listen(QHostAddress::Any,port);}其中,參數QHostAddress::Any表示在指定的端口對任意地址進行監聽。TCP應用實例(3)實現服務器函數當出現一個新的連接時,QTcpSever觸發incomingConnection()函數,其參數socketDescriptor指定了連接的Socket描述符,該函數的代碼如下:voidServer::incomingConnection(intsocketDescriptor){TcpClientSocket*tcpClientSocket=newTcpClientSocket(this); //(a)connect(tcpClientSocket,SIGNAL(updateClients(QString,int)),this,SLOT(updateClients(QString,int))); //(b)connect(tcpClientSocket,SIGNAL(disconnected(int)),this,SLOT(slotDisconnected(int))); //(c)tcpClientSocket->setSocketDescriptor(socketDescriptor); //(d)tcpClientSocketList.append(tcpClientSocket); //(e)}TCP應用實例槽函數updateClients()將任意客戶端發來的消息進行廣播,保證聊天室的所有成員均能看到其他人的發言,代碼如下:voidServer::updateClients(QStringmsg,intlength){emitupdateServer(msg,length); //(a)for(inti=0;i<tcpClientSocketList.count();i++) //(b){QTcpSocket*item=tcpClientSocketList.at(i);if(item->write(msg.toLatin1(),length)!=length){continue;}}}TCP應用實例槽函數slotDisconnected()實現從tcpClientSocketList列表中將斷開連接的TcpClientSocket對象刪除的功能,代碼如下:voidServer::slotDisconnected(intdescriptor){for(inti=0;i<tcpClientSocketList.count();i++){QTcpSocket*item=tcpClientSocketList.at(i);if(item->socketDescriptor()==descriptor){tcpClientSocketList.removeAt(i);return;}}return;}TCP應用實例(4)主程序創建TCP服務器在頭文件tcpserver.h中添加如下內容:#include"server.h"private:intport;Server*server;publicslots:voidslotCreateServer();voidupdateServer(QString,int);在源文件tcpserver.cpp的構造函數中添加如下代碼:port=8010;PortLineEdit->setText(QString::number(port));connect(CreateBtn,SIGNAL(clicked()),this,SLOT(slotCreateServer()));TCP應用實例其中,槽函數slotCreateServer()用于創建一個TCP服務器,代碼如下:voidTcpServer::slotCreateServer(){server=newServer(this,port); //創建一個服務器對象connect(server,SIGNAL(updateServer(QString,int)),this,SLOT(updateServer(QString,int)));CreateBtn->setEnabled(false);}這里將服務器對象的updateServer信號與槽函數updateServer進行連接,該函數用于更新服務器上的信息顯示,代碼為:voidTcpServer::updateServer(QStringmsg,intlength){ContentListWidget->addItem(msg.left(length));}(5)最后,不要忘了在項目的配置文件TcpS中添加一句:QT+=networkTCP應用實例2.TCP客戶端編程以“直接編寫代碼”(即取消勾選“Generateform”復選框)方式創建Qt項目,項目名TcpClient,“ClassInformation”頁基類
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit7 Today is Monday(教學設計)-2023-2024學年北師大版(一起)英語四年級下冊
- 2025年文化消費行業發展趨勢與市場前景解析
- 人教部編版(2024)七年級上冊(2024)9 從百草園到三味書屋魯迅教案配套
- 人教部編版七年級道德與法治下冊教案
- 人教版五年級下冊語文 第5單元 13.人物描寫一組(說課稿)教案
- 現代農學研究探索
- 16 夏天里的成長 教學設計-2024-2025學年統編版語文六年級上冊
- 七年級地理上冊 第一章 讓我們走進地理第一節 我們身邊的地理教學設計 (新版)湘教版
- 小暑節氣營銷策略
- 小升初挑戰與應對
- 2025年河南應用技術職業學院單招職業適應性測試題庫含答案
- 私募股權投資風險識別技術-深度研究
- 衛生院、社區衛生服務中心公民個人信息安全管理制度
- 2025年上半年江蘇省蘇州市總工會招錄社會化工會工作者18人易考易錯模擬試題(共500題)試卷后附參考答案
- 管道安全培訓課件:泄漏事故預防與應急處置
- 2024年河南藝術職業學院高職單招語文歷年參考題庫含答案解析
- 2025年全球及中國生物制藥過濾行業頭部企業市場占有率及排名調研報告
- 2025年湖北仙桃市城投公司招聘筆試參考題庫含答案解析
- 數字團隊管理制度內容
- 手術室腹腔鏡設備
- 湖南省長沙市雅禮實驗中學-主題班會-《陽光心態美麗青春》【課件】
評論
0/150
提交評論