版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1,網(wǎng)絡(luò)編程語言和套接字基礎(chǔ)知識概述,網(wǎng)絡(luò)應(yīng)用程序模型,2,內(nèi)容提要,操作系統(tǒng)應(yīng)用空間編程 可用各種高級語言 C/C+,Java, delphi,VB C語言常見注意事項 文件操作 字符串操作 函數(shù)指針應(yīng)用 程序結(jié)構(gòu) 有關(guān)資料和注意事項 常用C語言開發(fā)環(huán)境 套接字基礎(chǔ)知識,3,操作系統(tǒng)的應(yīng)用空間編程,可以使用常見的高級語言編程 Java:具有良好的可移植性,但需要虛擬機 VB,delphi:使用簡單,只用于Windows環(huán)境 C/C+:高效,各種操作系統(tǒng)支持的語言 使用C語言作為網(wǎng)絡(luò)編程語言的優(yōu)勢 具有多種操作系統(tǒng)支持,幾乎所有 執(zhí)行效率高 編程靈活,要求高 可以進行系統(tǒng)內(nèi)核編程 具有大量開源
2、項目,4,C語言文件操作,fopen和open的區(qū)別 fopen是ANSI C的標(biāo)準(zhǔn),可移植 open更加底層,linux系統(tǒng),打開設(shè)備 fwrite和fread 二進制,記錄操作 fgetc,fgets和fputc,fputs 字符和字符串操作 fseek,ftell,feof 如何獲取文件大???,5,讀取內(nèi)容賦值給數(shù)據(jù)結(jié)構(gòu)變量,數(shù)據(jù)結(jié)構(gòu)例子 struct student char name12; short age; int weight; struct student *man; man = (struct student *)malloc(sizeof(struct student);
3、 . num = fread(man, sizeof(struct student), 1, filestream) ; man-age+; . fwrite(man, sizeof(struct student), 1, filestream);,6,字符串函數(shù),char *p, str100; 數(shù)組名str是恒定的指針,p是指針變量; sprintf (fprintf, printf) 將多個變量格式化輸出到一個字符串中。(輸出到文件中,輸出到屏幕中) memset(str, 0, 100):置初值為0; memcpy,strcpy:拷貝內(nèi)存或者字符串; memcmp,strcmp:內(nèi)存比
4、較或者字符串比較; strstr,strchr:字符串查找或者字符查找; strlen:字符串長度,7,將數(shù)據(jù)結(jié)構(gòu)表現(xiàn)為字符串,sprintf(p, name=%snage=%dnweight= %dnn, man-name, man-age, man-weight); p= name=zhangshan(換行)age=18(換行)score = 66(換行)(換行) 需要先執(zhí)行:p=str; 不然p沒有空間。 如何從p這個字符串中找到分?jǐn)?shù)值? p=strstr(str, weight=); if(p != NULL) weight= atoi(p+7);,8,如何表示鏈表,struct st
5、udent char name12; short age; int weight; struct student *next; ; struct student *head, *last,*tmp; for(i=0;inext = tmp; last=tmp; ,9,函數(shù)指針的應(yīng)用,函數(shù)名可以作為一個函數(shù)的指針 可以定義一個指針變量來保存函數(shù)名 例子 結(jié)構(gòu)定義: struct net_proto_family intfamily; int(*create)(struct net *net, struct socket *sock, int protocol, int kern); struct
6、 module*owner; inet; 函數(shù)定義:int create_TCP(struct net *net, struct socket *sock,int protocol, int kern). 賦值:inet.create = create_TCP; 使用: int ret = inet.create(pnet, psock, tcp,kern);,10,C語言程序構(gòu)成,頭文件 宏定義固定值用有意義的名字表示 數(shù)據(jù)結(jié)構(gòu)定義,類定義 函數(shù)定義和全局外部變量定義 C文件 包含頭文件 定義變量 函數(shù)實現(xiàn) 分類,有序 縮進規(guī)范,注釋,空格.,11,C開發(fā)環(huán)境,linux gcc+gdb m
7、akefile的編寫 Windows VC+6.0 VS系列 C+BUILDER Qt,Eclipse C+ ACE,12,文本界面和圖形用戶界面,文本界面 所有輸入是getc,getch,gets之類 所有輸出用printf 不美觀,命令行,適用控制臺程序,服務(wù)器 圖形用戶界面 Qt,VC,VS 需要理解C+ 理解windows消息機制 實用于客戶端程序,13,C+, VC+, MFC,C+是C語言的超集,增加了面向?qū)ο蟮奶厣?;適合開發(fā)大型軟件; VC+使用了MS對C+的擴展,是可視化的C+開發(fā)環(huán)境; MFC是MS基礎(chǔ)類庫,以C+類的形式封裝了Windows API,并且包含一個應(yīng)用程序框架
8、,以減少應(yīng)用程序開發(fā)人員的工作量 具體內(nèi)容參見有關(guān)資料課件;,14,網(wǎng)絡(luò)應(yīng)用程序基礎(chǔ)知識,什么是套接字 網(wǎng)絡(luò)通信標(biāo)準(zhǔn) 網(wǎng)絡(luò)應(yīng)用程序的模型 C/S P2P 混合模式 網(wǎng)絡(luò)地址及其他問題 套接字的實現(xiàn)簡述,15,什么是套接字,TCP/IP協(xié)議存在于OS中,網(wǎng)絡(luò)服務(wù)通過OS提供 在OS中增加支持TCP/IP的系統(tǒng)調(diào)用Berkeley套接字 如socket,connect,send,recv等 socket是1981提出于BSD4.1 UNIX,16,什么是套接字,1. 套接字是一個主機本地應(yīng)用程序所創(chuàng)建的, 為操作系統(tǒng)所控制的接口 (“門”) . 2. 應(yīng)用進程通過這個接口,使用傳輸層提供的服務(wù),
9、跨網(wǎng)絡(luò)發(fā)送(/接收)消息到(/從)其他應(yīng)用進程。 3.Client/server模式的通信接口套接字接口.,17,套接字API,來自UNIX系統(tǒng),目前在linux,windows皆實現(xiàn)。 Berkeley套接字 ARPA要求伯克利分校將TCP/IP移植到UNIX中 需要創(chuàng)建一個接口,便于應(yīng)用程序使用這個接口 進行網(wǎng)絡(luò)通信 盡可能使用現(xiàn)有的系統(tǒng)調(diào)用,同時添加新的系統(tǒng)調(diào)用支持TCP/IP。 這個系統(tǒng)被稱為BSD UNIX 套接字,成為事實上的標(biāo)準(zhǔn),18,Winsock,伯克利套接口在Windows 平臺上的移植版本稱為Winsock。 它不僅包含BSD socket的大部分函數(shù) 還包含一組針對Wi
10、ndows 系統(tǒng)的擴展庫函數(shù) 通常以字母WSA 打頭 編程人員能充分利用windows 的消息機制以及Win32 平臺下的高性能I/O模型。 不同的TCP/IP 協(xié)議棧供應(yīng)商需要提供自己的Winsock 接口實現(xiàn)的動態(tài)鏈接庫 標(biāo)準(zhǔn)winsock庫,如WS2_32.dll 等,2:應(yīng)用層,19,什么是網(wǎng)絡(luò)應(yīng)用程序,網(wǎng)絡(luò)應(yīng)用程序: 能夠運行在不同的端系統(tǒng)并通過網(wǎng)絡(luò)彼此通信的程序 例如Web:Web服務(wù)器軟件和瀏覽器軟件通信 實現(xiàn)應(yīng)用層協(xié)議,沒有應(yīng)用程序軟件運行在網(wǎng)絡(luò)核心設(shè)備上 網(wǎng)絡(luò)核心設(shè)備不在應(yīng)用層起作用 這種設(shè)計方法促進了應(yīng)用程序的研發(fā),2:應(yīng)用層,20,一些網(wǎng)絡(luò)應(yīng)用,電子郵件 Web 即時訊息
11、 遠程登陸 P2P文件共享 在兩臺計算機之間的兩個帳戶之間的文件傳輸,多用戶網(wǎng)絡(luò)游戲 流式存儲視頻片段 因特網(wǎng)電話 實時視頻會議,2:應(yīng)用層,21,網(wǎng)絡(luò)應(yīng)用程序模型(體系結(jié)構(gòu)),客戶機/服務(wù)器體系結(jié)構(gòu) P2P體系結(jié)構(gòu) 客戶機/服務(wù)器和P2P混合的體系結(jié)構(gòu),2:應(yīng)用層,22,客戶機/服務(wù)器體系結(jié)構(gòu),服務(wù)器: 總是打開的主機 具有固定的、眾所周知的IP地址 主機群集常被用于創(chuàng)建強大的虛擬服務(wù)器 客戶機: 同服務(wù)器端通信 可以間斷的同服務(wù)器連接 可以擁有動態(tài)IP地址 客戶機相互之間不直接通信,2:應(yīng)用層,23,純P2P體系結(jié)構(gòu),沒有總是打開的服務(wù)器 任意一對主機直接相互通信 對等方間歇連接并且可以改
12、變IP地址 例如:Gnutella,emule 優(yōu)點:自擴展性 缺點:難以管理,2:應(yīng)用層,24,客戶機/服務(wù)器和P2P混合,emule 文件直接在對等方之間交換 文件搜索通過服務(wù)器 中心服務(wù)器記錄對等方內(nèi)容 對等方查詢中心服務(wù)器來決定要求的文件位置 即時訊息 兩個聊天用戶之間是P2P 注冊、查詢通過服務(wù)器 用戶上線時要在中心服務(wù)器上進行注冊 用戶與中心服務(wù)器聯(lián)系以找出在線伙伴,2:應(yīng)用層,25,進程通信,進程:運行在端系統(tǒng)中的程序 同一主機上的兩個進程通過內(nèi)部進程通信機制進行通信 不同主機上的進程通過交換報文相互通信,客戶機進程: 發(fā)起通信的進程 服務(wù)器進程: 等待聯(lián)系的進程,注意:具有P2
13、P體系結(jié)構(gòu)的應(yīng)用程序有客戶機進程和服務(wù)器進程。,2:應(yīng)用層,26,進程與計算機網(wǎng)絡(luò)的接口-套接字,進程通過它的套接字在網(wǎng)絡(luò)上發(fā)送和接收報文 套接字類比于門戶 發(fā)送進程把報文推出門戶 發(fā)送進程假定門戶到另外一側(cè)之間有運輸設(shè)施,該設(shè)施可以傳送報文到接收進程,套接字又叫做應(yīng)用程序編程接口API 用戶通過API對傳輸層的控制僅限于: (1) 選擇傳輸協(xié)議; (2) 能設(shè)定幾個參數(shù),2:應(yīng)用層,27,網(wǎng)絡(luò)進程尋址,為了一個進程能接收報文,它需要一個標(biāo)識 主機有唯一的32位IP地址 問:主機的IP地址足夠標(biāo)識進程嗎? 答:不能。因為一臺主機上能夠運行許多進程。,主機上的進程標(biāo)識包括IP地址和端口號 常用應(yīng)
14、用程序的端口號: Web服務(wù):80 郵件服務(wù):25 報文如何定位一個進程 UDP:目的IP和端口 TCP:目的IP和端口 源IP和源端口,28,套接字的類型,網(wǎng)絡(luò)系統(tǒng)提供了三種不同類型的套接口: 流式套接口(SOCK_STREAM) TCP 數(shù)據(jù)報套接口(SOCK_DGRAM) UDP 原始套接口(SOCK_RAW) ICMP,29,套接字的類型,SOCK_STREAM :流套接口,對應(yīng)于TCP 協(xié)議,。也稱面向連接的套接口、TCP 套接口等。 SOCK_DGRAM :數(shù)據(jù)報套接口,對應(yīng)于UDP 協(xié)議,也稱無連接套接口、面向消息套接口、UDP套接口等。 SOCK_RAW :原始套接口,可以讀寫
15、ICMP 、IGMP 報文;從IP 頭起構(gòu)造自己的報文;接受發(fā)向本機的但TCP/IP棧不能夠處理的IP包。,30,地址表示與地址操作函數(shù),sockaddr_in INET 協(xié)議族地址結(jié)構(gòu) in_addr IPv4地址結(jié)構(gòu) sockaddr 通用地址結(jié)構(gòu) 地址操作函數(shù),31,INET 協(xié)議族地址結(jié)構(gòu) sockaddr_in,地址結(jié)構(gòu)名中的最后兩個字母“in”,是Internet 的簡寫,說明該結(jié)構(gòu)僅適用于采用TCP/IP協(xié)議的網(wǎng)絡(luò)。 結(jié)構(gòu)定義如下: struct sockaddr _ in short sin_family; /地址族 u_short sin_port; /端口號 struct
16、in_addr sin_addr ; /IP地址 char sin_zero 8 ; ;,32,INET 協(xié)議族地址結(jié)構(gòu) sockaddr_in,sin_family :地址族,一般填為AF_INET 。 另一組和AF_XXX 類似的PF_XXX 常量,與AF_INET 相對應(yīng)有PF_INET 。 歷史上,PF_XXX 被設(shè)計用于表示協(xié)議族,而AF_XXX 用于表示地址族。最初的設(shè)想是單個協(xié)議族可以支持多個地址族,PF_XXX 用于套接口的創(chuàng)建,AF_XXX 用于套接口地址結(jié)構(gòu)。 在一般操作系統(tǒng)中,PF_XXX 被定義為與AF_XXX 值完全相同。 sin_port : 16 位的IP 端口,
17、必須注意字節(jié)序問題。 sin_addr :32位的IPv4 地址。,33,INET 協(xié)議族地址結(jié)構(gòu) sockaddr_in,sin_zero : 8 個字節(jié)的0 值填充,惟一的作用是使sockaddr_in 結(jié)構(gòu)大小與通用地址結(jié)構(gòu)sockaddr 相同。 一般在給結(jié)構(gòu)體賦值之前先將其全部初始化為零。 下面的兩個函數(shù)經(jīng)常被用來完成清零工作,由于前者僅適用于Win32 平臺,推薦使用后者。 VOID ZeroMemory ( PVOID destination , SIZE_T lenqth) ; void * memset ( void * dest, int c, size _t count
18、) ;,34,IPv4 地址結(jié)構(gòu)in_addr,用于存儲32位IPv4 地址的數(shù)據(jù)結(jié)構(gòu),其定義如下: struct in_addr union struct u_char s_b1, s_b2, s_b3, s_b4; S_un_b; struct u_short s_w1, s_w2; S_un_w; u_long S_addr; S_un; # define s_addr S_un.S_addr # define s_host S_un.S_un_b.s_b2 # define s_net S_un.S_un_b.s_b1 # define s_imp S_un.S_un_w.s_w2 #
19、 define s_impno S_un.S_un_b.s_b4 # define s_lh S_un.S_un_b.s_b3 ;,35,IPv4 地址結(jié)構(gòu)in_addr,有三種賦值接口:S_addr,S_un_b, S_un_w。 最常用的賦值接口是S_addr和S_un_b。 S _ addr : 32 位的無符號整數(shù),對應(yīng)32 位IPv4 地址。 要將地址202.119.9.199 賦給in_addr 結(jié)構(gòu),可以使用如下代碼: in_addr addr; addr.S_un.S_addr = inet_addr(“202.119.9.199”); 其中,inet_addr 函數(shù)用于轉(zhuǎn)換點
20、串IP 地址。 上面代碼可簡寫為: in_addr addr; addr.s_addr = inet_addr(“202.119.9.199”);,36,IPv4 地址結(jié)構(gòu)in_addr,假設(shè)主機上有多塊以太網(wǎng)卡,每塊網(wǎng)卡都配有IP 地址,并且不關(guān)心應(yīng)用程序具體使用哪個接口,那么在給addr.s_addr 賦值時可用常量INADDR_ANY。它在winsock2. h 中被定義為(u _ long ) 0X00000000 ,即本地的任意以太網(wǎng)接口IP 地址。 代碼如下: in_addr addr; addr.s_addr = INADDR_ANY;,37,IPv4 地址結(jié)構(gòu)in_addr,S
21、_un_b:包含4個8位無符號整數(shù),組合起來表示IPv4地址:s_b1.s_b2.s_b3.s_b4。 例子 In_addr addr; addr.S_un.S_un_b.s_b1 = 202; addr.S_un.S_un_b.s_b2 = 119; addr.S_un.S_un_b.s_b3 = 9; addr.S_un.S_un_b.s_b4 = 199;,38,通用地址結(jié)構(gòu) sockaddr,struct sockaddr u_short sa_ family; / address family / char sa_data14 ; / up to 14 bytes of protoc
22、ol address ; 在最初設(shè)計套接口函數(shù)接口時,面臨著這樣的選擇:是專門開發(fā)一套為TCP/IP 協(xié)議所用的API ,還是提供一種通用的編程接口以服務(wù)于多種網(wǎng)絡(luò)協(xié)議。 兩者之間的差別非常明顯 如果采用前者,那么提供的函數(shù)接口就會相對簡單, 對于后者,程序員在使用時必須提供足夠的信息(參數(shù))來告訴接口自己所采用的協(xié)議族。,39,通用地址結(jié)構(gòu) sockaddr,以connect 函數(shù)為例(該函數(shù)一般用于主動建立TCP 連接): int connect ( SOCKET s , const struct sockaddr FAR *name, int namelen); 為了使其適用于不同的網(wǎng)絡(luò)
23、協(xié)議環(huán)境,它的第二個參數(shù)并不是struct sockaddr_in *,而是struct sockaddr * 。 在使用涉及到這種地址結(jié)構(gòu)的函數(shù)接口時,必須強制將struct sockaddr_in 指針轉(zhuǎn)化為struct sockaddr指針。,40,地址操作函數(shù),1 函數(shù)inet_addr( ) 將包含點分格式的IPv4地址字符串轉(zhuǎn)化為in_addr 地址結(jié)構(gòu)適用的32位整數(shù)。 其定義如下:unsigned long inet_addr ( const char FAR * cp ) ; 參數(shù):cp, 點分IPv4 字符串。 如果沒有錯誤發(fā)生,函數(shù)返回32 位的地址信息。 如果cp字符串
24、包含的不是合法的IP 地址,那么函數(shù)返回INADDR_NONE 。,41,地址操作函數(shù),2 函數(shù)inet_ntoa( ) 將一個in_addr 地址值轉(zhuǎn)化為標(biāo)準(zhǔn)的點分IP 地址字符串。 定義如下:char FAR *inet_ntoa ( struct in_addr in ) ; in : IPv4 地址結(jié)構(gòu)。 返回值:如果沒有錯誤發(fā)生,函數(shù)inet_ntoa 返回一指向包含點分IP 地址的靜態(tài)存儲區(qū)字符指針;否則返回NULL 。 注釋:保存在該指針指向的存儲區(qū)中的信息僅確保在下一次Winsock 調(diào)用之前有效,因此應(yīng)該及時加以復(fù)制。,42,地址操作函數(shù),3 . gethostbyname(
25、 )完成的是域名解析功能。 函數(shù)定義如下: struct hostent FAR * gethostbyname ( const char FAR * name); name:待解析的域名字符串,如。 返回值: 如果沒有錯誤發(fā)生,函數(shù)返回包含域名地址信息的HOSTENT 結(jié)構(gòu)數(shù)據(jù),在HOSTENT 結(jié)構(gòu)中有一個h_addr_list 域,它是一個NULL 結(jié)尾的IP 地址列表。 有錯誤時,返回空指針。,43,不同的主機對字節(jié)值的存儲順序不同 小序在前(Little-endian) 在起始地址處存放整數(shù)的低序號字節(jié) 大序在前(Big-endian) 在起始地址處存放整數(shù)的高序號字節(jié)。 計算機究竟
26、采用那種字節(jié)存儲順序由各自的設(shè)計決定 Windows系列的操作系統(tǒng)使用的是小序在前的存儲方式 Sun OS和Solaris等采用的大序在前的存儲方式。,網(wǎng)絡(luò)字節(jié)順序,44,編程舉例,SOCKADDR_INaddrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); char recvBuf100; char tempBuf100; sprintf(tempBuf,%s say: %s,inet_ntoa(addrSrv.sin_addr),recvBuf); /將sin_addr儲存的IP(127.0.0.1)轉(zhuǎn)換成字符串形式。,45,
27、主機字節(jié)序 計算機各自的“主機字節(jié)”(Host-byte)來表示的。 網(wǎng)絡(luò)字節(jié)序 統(tǒng)一為:“大序在前” 需要注意字節(jié)序的地方 16位整數(shù) 32位整數(shù),46,在Winsock中,有一系列的函數(shù)可用于多字節(jié)數(shù)的轉(zhuǎn)換,把它們從主機字節(jié)順序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序,反之亦然。下面4個API函數(shù)便將一個數(shù)從主機字節(jié)順序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序: htonl():參數(shù)是主機字節(jié)順序的一個4字節(jié)數(shù),函數(shù)返回網(wǎng)絡(luò)字節(jié)順序的數(shù); htons():參數(shù)是主機字節(jié)順序的一個2字節(jié)數(shù),函數(shù)返回網(wǎng)絡(luò)字節(jié)順序的數(shù); WSAHtonl():參數(shù)是主機字節(jié)順序的一個4字節(jié)數(shù),函數(shù)返回網(wǎng)絡(luò)字節(jié)順序的數(shù); WSAHtons():參數(shù)是主機字
28、節(jié)順序的一個2字節(jié)數(shù),函數(shù)返回網(wǎng)絡(luò)字節(jié)順序的數(shù)。,47,基本Socket API函數(shù),socket(),bind(),connect(),accept(),listen(),getsockname(),getpeername(),gethostbyname(),close()和shutdown(),48,socket,頭文件 Windows下包含的頭文件: #include Linux下包含的頭文件: #include 函數(shù)原型 int socket(int family, int type, int protocol);,49,協(xié)議族,socket函數(shù)中的family值的常量定義:,50,t
29、ype,51,protocol,一般將其設(shè)置為0,除非用在原始套接口上。 Linux下protocol的常量在頭文件中定義,常量名以IPPROTO_開頭,如IPPROTO_IGMP。,52,bind,函數(shù)原型 int bind(int sockfd, const sockaddr *myaddr, socklen_t addrlen); 功能: bind函數(shù)將一個本地的協(xié)議地址和套接口聯(lián)系起來。 bind函數(shù)的第一個參數(shù)為套接口描述符sockfd,它是socket()函數(shù)的成功返回值。 第二個參數(shù)是一個指向與協(xié)議有關(guān)的地址結(jié)構(gòu)的指針,第三個參數(shù)則為地址的長度。,53,設(shè)置套接口地址結(jié)構(gòu)的幾種常
30、見方式,54,例子,struct sockaddr_in serv_addr; int sockfd; /* 套接口描述符 */ short port=3500; /* 端口號 */ bzero(char *) /* 將端口號轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序 */ if (bind(sockfd, (struct sockaddr *) char srvname= “10.65.19.10”; /* 服務(wù)器地址 */ int sockfd; /* 套接口描述符 */ /* 已調(diào)用socket產(chǎn)生sockfd */ bzero(char *) /*將端口號轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序 */ if (connect(so
31、ckfd, (struct sockaddr*) 函數(shù)的第一個參數(shù)sockfd為socket函數(shù)返回的套接口描述符,第二個參數(shù)規(guī)定了內(nèi)核為此套接口排隊的最大連接數(shù)。 對于給定的監(jiān)聽套接口,內(nèi)核要維護兩個隊列:未完成連接隊列(incomplete connection queue)和已完成連接隊列(completed connection queue)。已完成連接隊列中存放那些已完成TCP的三次握手過程的連接,套接口處于ESTABLISHED狀態(tài),其他的連接均放在未完成連接隊列中。函數(shù)listen的第二個參數(shù)backlog被規(guī)定為兩個隊列總和的最大值,不能將此參數(shù)設(shè)置為0。,58,accept,函數(shù)原型 int accept(int sockfd, struct sockaddr *cliaddr, soc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職藥劑(藥物分析實驗)試題及答案
- 2025年中職水產(chǎn)養(yǎng)殖技術(shù)(苗種繁育)試題及答案
- 2025年大學(xué)市場營銷(市場營銷調(diào)研)試題及答案
- 2025年大學(xué)智慧林業(yè)技術(shù)(森林資源監(jiān)測)試題及答案
- 2025年中職民用爆炸物品技術(shù)(生產(chǎn)工藝)試題及答案
- 2025年大學(xué)農(nóng)學(xué)(作物栽培)試題及答案
- 2025年中職(數(shù)字媒體技術(shù)應(yīng)用)動畫制作基礎(chǔ)試題及答案
- 2025年高職(應(yīng)用化工技術(shù))化工工藝優(yōu)化試題及答案
- 2025年高職機電一體化(電氣控制)試題及答案
- 2025年大學(xué)大二(農(nóng)業(yè)機械化及其自動化)農(nóng)業(yè)機械設(shè)計階段測試試題及答案
- 兒童支氣管哮喘急性發(fā)作急救培訓(xùn)流程
- 2026年焊工(技師)考試題庫(附答案)
- 四川藏區(qū)高速公路集團有限責(zé)任公司2026年校園招聘參考題庫完美版
- 基本醫(yī)療保險內(nèi)控制度
- 抽紙定制合同協(xié)議書
- 物料代購服務(wù)合同
- 2025-2026學(xué)年人教版小學(xué)音樂四年級上冊期末綜合測試卷及答案
- 高數(shù)上冊期末考試及答案
- 風(fēng)電場運維安全責(zé)任書2025年版
- 臘八蒜的課件
- 2025年70歲以上的老人三力測試題庫附答案
評論
0/150
提交評論