通信軟件設(shè)計(jì)方法第五+基于SOCKET編程的文件傳輸實(shí)例_第1頁(yè)
通信軟件設(shè)計(jì)方法第五+基于SOCKET編程的文件傳輸實(shí)例_第2頁(yè)
通信軟件設(shè)計(jì)方法第五+基于SOCKET編程的文件傳輸實(shí)例_第3頁(yè)
通信軟件設(shè)計(jì)方法第五+基于SOCKET編程的文件傳輸實(shí)例_第4頁(yè)
通信軟件設(shè)計(jì)方法第五+基于SOCKET編程的文件傳輸實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩80頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、通信軟件設(shè)計(jì)方法通信軟件設(shè)計(jì)方法楊雄楊雄 編寫編寫二零一五年二月二零一五年二月成都信息工程學(xué)院1講授內(nèi)容講授內(nèi)容章節(jié)安排(共章節(jié)安排(共2424學(xué)時(shí))學(xué)時(shí))通信系統(tǒng)及通信軟件通信系統(tǒng)及通信軟件學(xué)時(shí)學(xué)時(shí)通信協(xié)議與狀態(tài)機(jī)通信協(xié)議與狀態(tài)機(jī)學(xué)時(shí)學(xué)時(shí)狀態(tài)機(jī)程序設(shè)計(jì)及實(shí)例狀態(tài)機(jī)程序設(shè)計(jì)及實(shí)例學(xué)時(shí)學(xué)時(shí)TCP/IP編程編程API-socket函數(shù)函數(shù)學(xué)時(shí)學(xué)時(shí)基于基于SOCKET編程的文件傳輸實(shí)例編程的文件傳輸實(shí)例學(xué)時(shí)學(xué)時(shí)LINUX的結(jié)構(gòu)及文件概念的結(jié)構(gòu)及文件概念學(xué)時(shí)學(xué)時(shí)LINUX-串口設(shè)備及程序設(shè)計(jì)串口設(shè)備及程序設(shè)計(jì)學(xué)時(shí)學(xué)時(shí)基于基于TTY設(shè)備的程序?qū)嵗O(shè)備的程序?qū)嵗龑W(xué)時(shí)學(xué)時(shí)成都信息工程學(xué)院2本章內(nèi)容本章內(nèi)容第

2、五章第五章 基于基于SOCKET編程的文件傳輸實(shí)例(編程的文件傳輸實(shí)例(6學(xué)時(shí))學(xué)時(shí)) 第一節(jié)第一節(jié) 2臺(tái)機(jī)器之間的文件傳輸軟件功能要求臺(tái)機(jī)器之間的文件傳輸軟件功能要求1學(xué)時(shí)學(xué)時(shí) 1、本地文件拷貝、本地文件拷貝 2、遠(yuǎn)程文件傳輸、遠(yuǎn)程文件傳輸 3、功能、功能 4、使用界面設(shè)計(jì)、使用界面設(shè)計(jì) 第二節(jié)第二節(jié) 2臺(tái)機(jī)器之間的文件傳輸?shù)膮f(xié)議設(shè)計(jì)臺(tái)機(jī)器之間的文件傳輸?shù)膮f(xié)議設(shè)計(jì)1.5學(xué)時(shí)學(xué)時(shí) 1、協(xié)議設(shè)計(jì)、協(xié)議設(shè)計(jì) 2、狀態(tài)機(jī)設(shè)計(jì)、狀態(tài)機(jī)設(shè)計(jì) 第三節(jié)第三節(jié) 基于基于SOCKET的的C/S模型設(shè)計(jì)模型設(shè)計(jì)0.5學(xué)時(shí)學(xué)時(shí) 1、服務(wù)器進(jìn)程設(shè)計(jì)、服務(wù)器進(jìn)程設(shè)計(jì) 2、客戶機(jī)進(jìn)程設(shè)計(jì)、客戶機(jī)進(jìn)程設(shè)計(jì) 第四節(jié)第四節(jié) 數(shù)

3、據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)1.5學(xué)時(shí)學(xué)時(shí) 1、傳輸數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、傳輸數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 2、本地緩沖區(qū)設(shè)計(jì)、本地緩沖區(qū)設(shè)計(jì) 3、常量定義、常量定義 第五節(jié)第五節(jié) 客戶機(jī)程序詳細(xì)程序客戶機(jī)程序詳細(xì)程序0.5學(xué)時(shí)學(xué)時(shí) 1、流程、流程 2、程序、程序 第六節(jié)第六節(jié) 服務(wù)器程序詳細(xì)程序服務(wù)器程序詳細(xì)程序1學(xué)時(shí)學(xué)時(shí) 1、流程、流程 2、程序、程序成都信息工程學(xué)院3本章重點(diǎn)問題本章重點(diǎn)問題如何編寫如何編寫C C語(yǔ)言程序語(yǔ)言程序如何在如何在TCP上傳輸數(shù)據(jù)上傳輸數(shù)據(jù)成都信息工程學(xué)院4系統(tǒng)調(diào)用系統(tǒng)調(diào)用內(nèi)核核外進(jìn)程open()read()open()程序read()程序write()write()程序close()程序c

4、lose()文件文件系統(tǒng)(硬盤)上的某個(gè)文件fopen()fread()fwrite()fclose()第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院5本地文件拷貝本地文件拷貝程序程序第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院6示例示例-將文件將文件A拷貝到目錄拷貝到目錄/home/zhongshan下下AA內(nèi)存bufferread()write()一個(gè)程序讀寫即可!第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院7打開文件A生成文件/home/zhongshan/A讀取文件A的N個(gè)字節(jié)放入s_buffer實(shí)際讀取字節(jié)數(shù)放入s

5、_lens_len = 0?將s_buffer的s_len字節(jié)寫入/home/zhongshan/A開始結(jié)束關(guān)閉所有文件main()#define N 2048 int s_fd, r_fd; int s_len; char s_bufferN; s_fd = open(“/home/liyang/A”,O_RDWR); r_fd = open(“/home/zhongshan/A”,O_RDWR|O_CREAT); wihile (s_len = read(s_fd, s_buffer, N) ! = 0) r = write(r_fd, s_buffer, s_len); if (r !=

6、 1) log_error(“”“”); break; close(s_fd); close(r_fd);YN第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院8遠(yuǎn)程文件拷貝遠(yuǎn)程文件拷貝程序程序第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院9應(yīng)用舉例應(yīng)用舉例-在兩個(gè)主機(jī)之間拷貝二進(jìn)制文件,文件名相同在兩個(gè)主機(jī)之間拷貝二進(jìn)制文件,文件名相同文件拷貝AAA二進(jìn)制文件AAA二進(jìn)制文件AAA二進(jìn)制文件第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院10應(yīng)用舉例應(yīng)用舉例-在兩個(gè)主機(jī)之間拷貝二進(jìn)制文件,文件名相同在兩個(gè)主機(jī)之間拷貝二進(jìn)制文件,文件

7、名相同文件拷貝AAA二進(jìn)制文件AAA二進(jìn)制文件sendto()recvfrom()AAA二進(jìn)制文件socket()socket()connect()connect()write()/send()write()/send()read()/recv()read()/recv()close()close()socket()socket()bind()bind()listen()listen()accept()accept()read()/recv()read()/recv()write()/send()write()/send()close()close()第五章第五章 SOCKET API 應(yīng)用實(shí)

8、例應(yīng)用實(shí)例成都信息工程學(xué)院11應(yīng)用舉例應(yīng)用舉例-在兩個(gè)主機(jī)之間拷貝二進(jìn)制文件,文件名相同在兩個(gè)主機(jī)之間拷貝二進(jìn)制文件,文件名相同int fd, sd;fd = open(本地文件本地文件);sd = socket();connect(sd, 服務(wù)器服務(wù)器IP地址地址+端口號(hào)端口號(hào));read(fd, buf, );write(sd, buf, );close(sd);close(fd);int fd, sd;fd = open(本地文件本地文件, 創(chuàng)建創(chuàng)建);sd = socket();bind(sd);listen(sd);dsd = accept(sd);read(dsd, buf, );

9、write(dsd, buf, );close(fd);close(sd);需要2個(gè)程序來(lái)完成!硬硬盤盤硬硬盤盤第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例哪個(gè)程序先啟動(dòng)?哪個(gè)程序先啟動(dòng)? 成都信息工程學(xué)院12第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例本示例只能一次傳遞一個(gè)文件,如需要第二個(gè)文件傳輸則需要手工啟動(dòng)服務(wù)器如需要任意多的文件傳輸怎么辦?如需要任意多的文件傳輸怎么辦? 2個(gè)條件:1、父進(jìn)程不能死;2、每個(gè)文件傳輸請(qǐng)求由父進(jìn)程創(chuàng)建子進(jìn)程來(lái)完成成都信息工程學(xué)院13第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例本示例只能單向傳輸文件 如需要雙向文件傳輸怎么辦?如需要

10、雙向文件傳輸怎么辦? 2個(gè)方法:1、本示例交換來(lái)運(yùn)行即可;2、本示例的客戶機(jī)創(chuàng)建一個(gè)接收進(jìn)程, 服務(wù)器創(chuàng)建一個(gè)發(fā)送進(jìn)程發(fā)送進(jìn)程硬硬盤盤接收進(jìn)程硬硬盤盤接收進(jìn)程發(fā)送進(jìn)程read()read()read()read()write()write()write()write()成都信息工程學(xué)院14第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例本示例不能實(shí)現(xiàn)即時(shí)通 如需要雙向短息傳輸怎么辦?如需要雙向短息傳輸怎么辦? 類似類似QQ!QQ!發(fā)送線程接收線程發(fā)送進(jìn)程發(fā)送線程read()write(顯示器窗口)write(遠(yuǎn)程)read()write(顯示器窗口)write(遠(yuǎn)程)write(顯示器窗口

11、)read()成都信息工程學(xué)院15第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例如需要雙向短息傳輸,同時(shí)完成雙向文件傳輸如需要雙向短息傳輸,同時(shí)完成雙向文件傳輸怎么辦?怎么辦?太復(fù)雜了!如能理順執(zhí)行的進(jìn)程/線程,不復(fù)雜了!成都信息工程學(xué)院16第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例本章講解一個(gè)示例:用一個(gè)TCP連接上實(shí)現(xiàn)單向文件和短信傳輸?shù)某绦蛟O(shè)計(jì)(可以任意多個(gè)客戶機(jī)請(qǐng)求)(每個(gè)客戶機(jī)每次請(qǐng)求可以傳輸任意多次文件)文件文件短信短信短信一個(gè)TCP連接文件短信文件短信成都信息工程學(xué)院17第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例物理層數(shù)據(jù)鏈路層網(wǎng)際層(IP)傳輸層(TC

12、P)應(yīng)用層主機(jī)ATCP/IP系統(tǒng)結(jié)構(gòu)網(wǎng)絡(luò)路由物理層數(shù)據(jù)鏈路層網(wǎng)際層(IP)傳輸層(TCP)應(yīng)用層主機(jī)B成都信息工程學(xué)院18TCPTCP客戶臨時(shí)端口TCP客戶臨時(shí)端口TCP客戶臨時(shí)端口主服務(wù)器TCP 連接熟知端口僅用于接受服務(wù)請(qǐng)求創(chuàng)建從服務(wù)器進(jìn)程主服務(wù)器有時(shí)又稱為父服務(wù)器,而從服務(wù)器又稱為子服務(wù)器。 客戶客戶/服務(wù)器模型服務(wù)器模型第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院19SOCKETSOCKET系統(tǒng)調(diào)用系統(tǒng)調(diào)用系統(tǒng)調(diào)用系統(tǒng)調(diào)用功能功能使用者使用者Socket(format, type, protocol)獲得一個(gè)SOCKET客戶、服務(wù)者bind(sd, addres

13、s, length)SOCKET和address綁定服務(wù)者listen(sd, qlength)設(shè)置傾聽服務(wù)者accept(sd, address, addrlen)接受SOCKET請(qǐng)求服務(wù)者connect(sd, address, length)請(qǐng)求一個(gè)SOCKET連接客戶send(sd, msg, length, flags)向SOCKET發(fā)送數(shù)據(jù)客戶、服務(wù)者recv(sd, buf, length, flags)從SOCKET接收數(shù)據(jù)客戶、服務(wù)者write(sd, buf, len)向SOCKET寫數(shù)據(jù)客戶、服務(wù)者read(sd, buf, len)從SOCKET讀數(shù)據(jù)客戶、服務(wù)者shu

14、tdown(sd, mode)關(guān)閉SOCKET客戶、服務(wù)者close(sd)釋放SOCKET客戶、服務(wù)者第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院20遠(yuǎn)程文件和文字傳輸遠(yuǎn)程文件和文字傳輸功能與界面設(shè)計(jì)功能與界面設(shè)計(jì)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院21第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例1、客戶機(jī)上的軟件包叫 FileCP-cli,運(yùn)行的程序命名talk2、服務(wù)器上的軟件包叫 FileCP-ser,運(yùn)行程序命令命名 talkdHello!客戶機(jī)服務(wù)器成都信息工程學(xué)院22第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)

15、例1、客戶機(jī)上從鍵盤輸入的文字傳輸?shù)椒?wù)器的顯示器上2、客戶機(jī)上從鍵盤輸入的文件名傳輸?shù)椒?wù)器的文件系統(tǒng)中Hello!客戶機(jī)服務(wù)器3、客戶機(jī)到服務(wù)器的單向數(shù)據(jù)信息傳輸成都信息工程學(xué)院23第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例傳輸層(TCP)FileCP-cli客戶機(jī)網(wǎng)絡(luò)路由服務(wù)器低層協(xié)議傳輸層(TCP)FileCP-ser低層協(xié)議Hello!文件文件系統(tǒng)文件系統(tǒng)顯示器顯示器鍵盤鍵盤Hello!文件文件系統(tǒng)文件系統(tǒng)顯示器顯示器文字傳輸文件傳輸命令成都信息工程學(xué)院24第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例本章講解一個(gè)示例:用一個(gè)TCP連接上實(shí)現(xiàn)單向文件和短信傳輸?shù)某绦蛟O(shè)

16、計(jì)(可以任意多個(gè)客戶機(jī)請(qǐng)求)(每個(gè)客戶機(jī)每次請(qǐng)求可以傳輸任意多次文件)文件文件短信短信短信一個(gè)TCP連接文件短信文件短信成都信息工程學(xué)院25A:傳輸?shù)奈淖治淖謧鬏敵晒?!F:傳輸文件名XXXX文件傳輸成功!客戶機(jī)界面接收的文字XX文件正在接收XX文件已經(jīng)接收服務(wù)器界面第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院26客戶機(jī)界面服務(wù)器界面Q:退出客戶機(jī)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例服務(wù)器子進(jìn)程結(jié)束成都信息工程學(xué)院27遠(yuǎn)程文件和文字傳輸遠(yuǎn)程文件和文字傳輸協(xié)議設(shè)計(jì)協(xié)議設(shè)計(jì)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院28客戶機(jī)界面服務(wù)器

17、界面第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例Hello!客戶機(jī)服務(wù)器1、服務(wù)器如何知道數(shù)據(jù)/命令的結(jié)束?頭長(zhǎng)度尾數(shù)據(jù)2、服務(wù)器如何知道數(shù)據(jù)(命令)的類型?頭標(biāo)志F:文件信息:文件信息D:文件數(shù)據(jù):文件數(shù)據(jù)A:文字?jǐn)?shù)據(jù):文字?jǐn)?shù)據(jù)Q:結(jié)束這次通信:結(jié)束這次通信成都信息工程學(xué)院29第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例傳輸層(TCP)FileCP-cli客戶機(jī)文字和文件傳輸?shù)膱?bào)文示意網(wǎng)絡(luò)路由網(wǎng)絡(luò)路由服務(wù)器低層協(xié)議傳輸層(TCP)FileCP-ser低層協(xié)議A字串長(zhǎng)度字串F名字長(zhǎng)度名字串 文件長(zhǎng)度D數(shù)據(jù)長(zhǎng)度數(shù)據(jù)字節(jié)協(xié)議采用長(zhǎng)度傳輸方式,所以不需要結(jié)束字符以及轉(zhuǎn)義協(xié)議,也不需要

18、服務(wù)器的回答信息。成都信息工程學(xué)院30遠(yuǎn)程文件和文字傳輸遠(yuǎn)程文件和文字傳輸服務(wù)器狀態(tài)機(jī)設(shè)計(jì)服務(wù)器狀態(tài)機(jī)設(shè)計(jì)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院31第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例主進(jìn)程只有一個(gè)狀態(tài),就是等待客戶機(jī)的請(qǐng)求,然后創(chuàng)建子進(jìn)程為其服務(wù)。所以所謂服務(wù)器狀態(tài)機(jī)就是這個(gè)子進(jìn)程的。狀態(tài):狀態(tài):空閑狀態(tài):等待客戶機(jī)的命令;文件接收狀態(tài):正在接收文件內(nèi)容并寫入文件中;退出狀態(tài):進(jìn)程即將死亡,任務(wù)失敗或完成。 這個(gè)狀態(tài)是瞬間存在的。成都信息工程學(xué)院32第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例事件(網(wǎng)絡(luò)報(bào)文或網(wǎng)絡(luò)連接狀態(tài)):事件(網(wǎng)絡(luò)報(bào)文

19、或網(wǎng)絡(luò)連接狀態(tài)):A命令:請(qǐng)求接收字串并要求立即接收;F命令:請(qǐng)求接收文件;D命令:數(shù)據(jù)到達(dá),請(qǐng)接收;Q命令:客戶機(jī)請(qǐng)求結(jié)束任務(wù);數(shù)據(jù)字節(jié)讀取完: 需要讀取的數(shù)據(jù)長(zhǎng)度已經(jīng)減少為0, 表示已經(jīng)完成本次傳輸;連接流產(chǎn):故障出現(xiàn),請(qǐng)退出;成都信息工程學(xué)院33服務(wù)器端接收信息狀態(tài)圖空閑文件接收退出A命令命令.數(shù)據(jù)字節(jié)讀取完數(shù)據(jù)字節(jié)讀取完-把這個(gè)字串在顯示器上打印把這個(gè)字串在顯示器上打印Q命令命令-提示:任務(wù)完成提示:任務(wù)完成F命令命令-從網(wǎng)絡(luò)讀取文件名稱從網(wǎng)絡(luò)讀取文件名稱連接流產(chǎn)連接流產(chǎn)-提示:網(wǎng)絡(luò)故障提示:網(wǎng)絡(luò)故障D命令命令-從網(wǎng)絡(luò)讀取數(shù)據(jù)字節(jié)從網(wǎng)絡(luò)讀取數(shù)據(jù)字節(jié)客戶機(jī)請(qǐng)求客戶機(jī)請(qǐng)求-(空)(空)連接

20、流產(chǎn)連接流產(chǎn)-提示:網(wǎng)絡(luò)故障提示:網(wǎng)絡(luò)故障A命令命令.連接流產(chǎn)連接流產(chǎn)-提示:網(wǎng)絡(luò)故障提示:網(wǎng)絡(luò)故障數(shù)據(jù)字節(jié)讀取完數(shù)據(jù)字節(jié)讀取完-提示:一個(gè)文件傳輸完提示:一個(gè)文件傳輸完成都信息工程學(xué)院34遠(yuǎn)程文件和文字傳輸遠(yuǎn)程文件和文字傳輸客戶機(jī)狀態(tài)機(jī)設(shè)計(jì)客戶機(jī)狀態(tài)機(jī)設(shè)計(jì)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院35第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例客戶機(jī)進(jìn)程啟動(dòng)就進(jìn)入請(qǐng)求服務(wù)器狀態(tài),等待服務(wù)器的請(qǐng)求回答,如連接建立成功,則進(jìn)入傳輸狀態(tài)。因?yàn)樽髡咴O(shè)計(jì)的應(yīng)用是非并發(fā)的,也就是說傳輸文字或傳輸文件,可以是很多次進(jìn)行,但是每次之間是順序進(jìn)行的。客戶機(jī)接收操作者的鍵盤命令

21、也是順序的。因此整個(gè)狀態(tài)只有一個(gè)狀態(tài)。 成都信息工程學(xué)院36第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例狀態(tài):狀態(tài):連接已經(jīng)建立狀態(tài):只有一個(gè)狀態(tài)的話,怎么命名都是對(duì)的,但是為了符合實(shí)際意思還是選擇這個(gè)名稱好些;結(jié)束狀態(tài):這是一個(gè)虛擬狀態(tài)。程序都結(jié)束了,這個(gè)狀態(tài)就無(wú)意義。 成都信息工程學(xué)院37第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例事件(鍵盤命令):事件(鍵盤命令):A命令:鍵盤輸入的A+要傳輸?shù)奈淖肿执籉命令:鍵盤輸入的F+要傳輸?shù)奈募?;Q命令:鍵盤輸入的Q。表示退出本進(jìn)程;連接流產(chǎn):故障出現(xiàn),退出; 成都信息工程學(xué)院38客戶機(jī)端發(fā)送信息狀態(tài)圖連接建立A命令命令.完成

22、傳輸完成傳輸-從鍵盤讀取字串,并傳輸給服務(wù)器從鍵盤讀取字串,并傳輸給服務(wù)器連接流產(chǎn)連接流產(chǎn)-提示:網(wǎng)絡(luò)故障提示:網(wǎng)絡(luò)故障連接建立成功連接建立成功-(空)(空)F命令命令.完成傳輸完成傳輸-從鍵盤讀取文件名從鍵盤讀取文件名傳輸文件信息傳輸文件信息傳輸文件數(shù)據(jù)傳輸文件數(shù)據(jù)結(jié) 束F命令命令.連接流產(chǎn)連接流產(chǎn)-提示:網(wǎng)絡(luò)故障提示:網(wǎng)絡(luò)故障Q命令命令-提示:所有任務(wù)完成提示:所有任務(wù)完成A命令命令.連接流產(chǎn)連接流產(chǎn)-提示:網(wǎng)絡(luò)故障提示:網(wǎng)絡(luò)故障成都信息工程學(xué)院39遠(yuǎn)程文件和文字傳輸遠(yuǎn)程文件和文字傳輸數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院40第五章第五

23、章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例傳輸層(TCP)FileCP-cli客戶機(jī)文字和文件傳輸?shù)膱?bào)文示意網(wǎng)絡(luò)路由網(wǎng)絡(luò)路由服務(wù)器低層協(xié)議傳輸層(TCP)FileCP-ser低層協(xié)議A字串長(zhǎng)度字串F名字長(zhǎng)度名字串 文件長(zhǎng)度D數(shù)據(jù)長(zhǎng)度數(shù)據(jù)字節(jié)協(xié)議采用長(zhǎng)度傳輸方式,所以不需要結(jié)束字符以及轉(zhuǎn)義協(xié)議,也不需要服務(wù)器的回答信息。成都信息工程學(xué)院41第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例#define MAX_FILE_NAME_LENGTH100#define MAX_DATA_LENGTH2048struct file_name_t / 定義傳輸?shù)奈募麍?bào)文結(jié)構(gòu)unsigned long

24、 FileLength;unsigned char FileNameMAX_FILE_NAME_LENGTH;struct info_trans_pdu_t / 定義傳輸?shù)膱?bào)文結(jié)構(gòu)unsigned short PDU_type; / 為了對(duì)齊,所以采用short,按理char就夠了!unsigned short PDU_length;union struct file_name_t FileInfoData;unsigned char PduDataMAX_DATA_LENGTH; InfoTransPduBody;成都信息工程學(xué)院42第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例主進(jìn)程

25、只有一個(gè)狀態(tài),就是等待客戶機(jī)的請(qǐng)求,然后創(chuàng)建子進(jìn)程為其服務(wù)。所以所謂服務(wù)器狀態(tài)機(jī)就是這個(gè)子進(jìn)程的。狀態(tài):狀態(tài):空閑狀態(tài):等待客戶機(jī)的命令;文件接收狀態(tài):正在接收文件內(nèi)容并寫入文件中;退出狀態(tài):進(jìn)程即將死亡,任務(wù)失敗或完成。 這個(gè)狀態(tài)是瞬間存在的。服務(wù)器成都信息工程學(xué)院43第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例事件(網(wǎng)絡(luò)報(bào)文或網(wǎng)絡(luò)連接狀態(tài)):事件(網(wǎng)絡(luò)報(bào)文或網(wǎng)絡(luò)連接狀態(tài)):A命令:請(qǐng)求接收字串并要求立即接收;F命令:請(qǐng)求接收文件;D命令:數(shù)據(jù)到達(dá),請(qǐng)接收;Q命令:客戶機(jī)請(qǐng)求結(jié)束任務(wù);數(shù)據(jù)字節(jié)讀取完: 需要讀取的數(shù)據(jù)長(zhǎng)度已經(jīng)減少為0, 表示已經(jīng)完成本次傳輸;連接流產(chǎn):故障出現(xiàn),請(qǐng)退出

26、;成都信息工程學(xué)院44第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例服務(wù)器:服務(wù)器:#define SER_FREE_STATE0 / 空閑狀態(tài)#define SER_FILE_RECV_STATE1 / 文件接收狀態(tài)#define SER_QUIT_STATE2 / 立即退出狀態(tài)#define SER_KEY_A_COMMAND1 / A命令#define SER_KEY_F_COMMAND2 / F命令#define SER_KEY_D_COMMAND3 / D命令#define SER_DATA_OVER4 / 數(shù)據(jù)字節(jié)讀取完#define SER_CONN_ABORT5 / 連接

27、流產(chǎn)#define SER_CLIENT_OVER6 / Q命令,客戶機(jī)關(guān)閉成都信息工程學(xué)院45第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例客戶機(jī)進(jìn)程啟動(dòng)就進(jìn)入請(qǐng)求服務(wù)器狀態(tài),等待服務(wù)器的請(qǐng)求回答,如連接建立成功,則進(jìn)入傳輸狀態(tài)。因?yàn)樽髡咴O(shè)計(jì)的應(yīng)用是非并發(fā)的,也就是說傳輸文字或傳輸文件,可以是很多次進(jìn)行,但是每次之間是順序進(jìn)行的??蛻魴C(jī)接收操作者的鍵盤命令也是順序的。因此整個(gè)狀態(tài)只有一個(gè)狀態(tài)。 客戶機(jī)成都信息工程學(xué)院46第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例狀態(tài):狀態(tài):連接已經(jīng)建立狀態(tài):只有一個(gè)狀態(tài)的話,怎么命名都是對(duì)的,但是為了符合實(shí)際意思還是選擇這個(gè)名稱好些;結(jié)束狀態(tài)

28、:這是一個(gè)虛擬狀態(tài)。程序都結(jié)束了,這個(gè)狀態(tài)就無(wú)意義。 成都信息工程學(xué)院47第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例事件(鍵盤命令):事件(鍵盤命令):A命令:鍵盤輸入的A+要傳輸?shù)奈淖肿执?;F命令:鍵盤輸入的F+要傳輸?shù)奈募籕命令:鍵盤輸入的Q。表示退出本進(jìn)程;連接流產(chǎn):故障出現(xiàn),退出; 成都信息工程學(xué)院48第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例客戶機(jī):客戶機(jī):#define CLI_CONN_OK_STATE0 / 連接建立#define CLI_END_STATE1 / 客戶機(jī)結(jié)束狀態(tài)#define CLI_KEY_A_COMMAND1 / A命令#defin

29、e CLI_KEY_F_COMMAND2 / F命令#define CLI_KEY_Q_COMMAND3 / Q命令#define CLI_CONN_ABORT4 / 連接流產(chǎn)#define CLI_ERROR_COMMAND9 / 鍵盤命令錯(cuò)誤成都信息工程學(xué)院49遠(yuǎn)程文件和文字傳輸遠(yuǎn)程文件和文字傳輸粗流程設(shè)計(jì)粗流程設(shè)計(jì)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院50第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例客戶機(jī)主要模塊和流程如下:客戶機(jī)主要模塊和流程如下:1、建立和服務(wù)器的連接;2、等待鍵盤輸入命令;3、處理命令,選擇如下之一處理(switch-case)

30、a) A命令-文字傳輸;b) F命令-文件傳輸;c) Q命令-結(jié)束任務(wù);d) 網(wǎng)絡(luò)故障;4、轉(zhuǎn)2。成都信息工程學(xué)院51第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例服務(wù)器主要模塊和流程如下:服務(wù)器主要模塊和流程如下:1、初始化本地連接接口(服務(wù)端口號(hào)的設(shè)置), 等待客戶機(jī)的連接建立請(qǐng)求;2、獲得一個(gè)請(qǐng)求,并創(chuàng)建一個(gè)子進(jìn)程(子服務(wù)器);a) 子進(jìn)程:等待網(wǎng)絡(luò)事件(報(bào)文)的到來(lái);b) 子進(jìn)程:處理事件,選擇如下之一處理(switch-case)1. A報(bào)文-文字報(bào)文;2. F報(bào)文-文件名稱報(bào)文;3. D報(bào)文-文件數(shù)據(jù)報(bào)文;4. Q報(bào)文-結(jié)束任務(wù)報(bào)文5. 連接流產(chǎn)事件c) 子進(jìn)程:轉(zhuǎn)a)轉(zhuǎn)2。

31、 成都信息工程學(xué)院52遠(yuǎn)程文件和文字傳輸遠(yuǎn)程文件和文字傳輸客戶客戶/ /服務(wù)器模型設(shè)計(jì)服務(wù)器模型設(shè)計(jì)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院53read()socket()bind()accept()無(wú)限制重復(fù)socket()若需要就重復(fù)write()進(jìn)程close()close()客戶客戶請(qǐng)求響應(yīng)listen()fork()connect()write()read()close(監(jiān)聽)若需要就重復(fù)連接請(qǐng)求主服務(wù)器close()從屬服務(wù)器服務(wù)器服務(wù)器第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院54第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)

32、用實(shí)例客戶機(jī)主要模塊和流程如下:客戶機(jī)主要模塊和流程如下:1、建立和服務(wù)器的連接;2、等待鍵盤輸入命令;3、處理命令,選擇如下之一處理(switch-case)a) A命令-文字傳輸;b) F命令-文件傳輸;c) Q命令-結(jié)束任務(wù);d) 網(wǎng)絡(luò)故障;4、轉(zhuǎn)2。成都信息工程學(xué)院55read()socket()若需要就重復(fù)write()close()客戶客戶connect()第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例客戶機(jī)主要模塊和流程如下:客戶機(jī)主要模塊和流程如下:1、建立和服務(wù)器的連接;2、等待鍵盤輸入命令;3、處理命令,選擇如下之一處理a) A命令-文字傳輸;b) F命令-文件傳輸;

33、c) Q命令-結(jié)束任務(wù);d) 網(wǎng)絡(luò)故障;4、轉(zhuǎn)2。成都信息工程學(xué)院56write(文字)socket()While(1)case A:close(所有文件)客戶客戶connect()第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例客戶機(jī)主要模塊和流程如下:客戶機(jī)主要模塊和流程如下:1、建立和服務(wù)器的連接;2、等待鍵盤輸入命令;3、處理命令,選擇如下之一處理a) A命令-文字傳輸;b) F命令-文件傳輸;c) Q命令-結(jié)束任務(wù);d) 網(wǎng)絡(luò)故障;4、轉(zhuǎn)2。read(鍵盤)/fgets()Switch(鍵盤命令)case F:case E:case 故障:write(文件)成都信息工程學(xué)院57第

34、五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例服務(wù)器主要模塊和流程如下:服務(wù)器主要模塊和流程如下:1、初始化本地連接接口(服務(wù)端口號(hào)的設(shè)置), 等待客戶機(jī)的連接建立請(qǐng)求;2、獲得一個(gè)請(qǐng)求,并創(chuàng)建一個(gè)子進(jìn)程(子服務(wù)器);a) 子進(jìn)程:等待網(wǎng)絡(luò)事件(報(bào)文)的到來(lái);b) 子進(jìn)程:處理事件,選擇如下之一處理(switch-case)1. A報(bào)文-文字報(bào)文;2. F報(bào)文-文件名稱報(bào)文;3. D報(bào)文-文件數(shù)據(jù)報(bào)文;4. Q報(bào)文-結(jié)束任務(wù)報(bào)文5. 連接流產(chǎn)事件c) 子進(jìn)程:轉(zhuǎn)a)3、轉(zhuǎn)2。 成都信息工程學(xué)院58socket()bind()accept()無(wú)限制重復(fù)close()listen()fork(

35、)主服務(wù)器服務(wù)器服務(wù)器第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例服務(wù)器主要模塊和流程如下:服務(wù)器主要模塊和流程如下:1、初始化本地連接接口(服務(wù)端口號(hào)的設(shè)置), 等待客戶機(jī)的連接建立請(qǐng)求;2、獲得一個(gè)請(qǐng)求,并創(chuàng)建一個(gè)子進(jìn)程(子服務(wù)器);3、轉(zhuǎn)2。 成都信息工程學(xué)院59new_sd = accept(sd)close()fork()主服務(wù)器第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例服務(wù)器主要模塊和流程如下:服務(wù)器主要模塊和流程如下:1、初始化本地連接接口(服務(wù)端口號(hào)的設(shè)置), 等待客戶機(jī)的連接建立請(qǐng)求;2、獲得一個(gè)請(qǐng)求,并創(chuàng)建一個(gè)子進(jìn)程(子服務(wù)器);3、轉(zhuǎn)2。 socket(

36、TCP)bind(端口號(hào))while(1)listen(sd)服務(wù)器服務(wù)器子服務(wù)器成都信息工程學(xué)院60switch(報(bào)文類型)case A報(bào)文:read(網(wǎng)絡(luò)報(bào)文)close(監(jiān)聽)while(1)close(所有文件)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例服務(wù)器主要模塊和流程如下:服務(wù)器主要模塊和流程如下:a)子進(jìn)程:等待網(wǎng)絡(luò)事件(報(bào)文)的到來(lái);b)子進(jìn)程:處理事件,選擇如下之一處理(switch-case) 1. A報(bào)文-文字報(bào)文; 2. F報(bào)文-文件名稱報(bào)文; 3. D報(bào)文-文件數(shù)據(jù)報(bào)文; 4. Q報(bào)文-結(jié)束任務(wù)報(bào)文 5. 連接流產(chǎn)事件c) 子進(jìn)程:轉(zhuǎn)a)write(顯示器

37、)case F報(bào)文:case D報(bào)文:case E報(bào)文:case 故障:創(chuàng)建接收文件write(接收文件)接收完關(guān)閉文件成都信息工程學(xué)院61第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例傳輸層(TCP)FileCP-cli客戶機(jī)文字和文件傳輸?shù)膱?bào)文示意網(wǎng)絡(luò)路由網(wǎng)絡(luò)路由服務(wù)器低層協(xié)議傳輸層(TCP)FileCP-ser低層協(xié)議A字串長(zhǎng)度字串F名字長(zhǎng)度名字串 文件長(zhǎng)度D數(shù)據(jù)長(zhǎng)度數(shù)據(jù)字節(jié)A-PDUF-PDUD-PDU統(tǒng)一的格式不同的內(nèi)容成都信息工程學(xué)院62第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例#define MAX_FILE_NAME_LENGTH100#define MAX_D

38、ATA_LENGTH2048struct file_name_t / 定義傳輸?shù)奈募麍?bào)文結(jié)構(gòu)unsigned long FileLength;unsigned char FileNameMAX_FILE_NAME_LENGTH;struct info_trans_pdu_t / 定義傳輸?shù)膱?bào)文結(jié)構(gòu)unsigned short PDU_type; / 為了對(duì)齊,所以采用short,按理char就夠了!unsigned short PDU_length;uion struct file_name_t FileInfoData;unsigned char PduDataMAX_DATA_LENGT

39、H; InfoTransPduBody;成都信息工程學(xué)院63一個(gè)問題:一個(gè)問題:怎么知道網(wǎng)絡(luò)故障?怎么知道網(wǎng)絡(luò)故障?第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院64第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例SOCKET函數(shù)API返回小于0成都信息工程學(xué)院65另外一個(gè)問題:另外一個(gè)問題:客戶機(jī)在讀鍵盤客戶機(jī)在讀鍵盤怎么知道網(wǎng)絡(luò)故障怎么知道網(wǎng)絡(luò)故障? ??第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院66第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例read(鍵盤)TCP連接?read(鍵盤)TCP連接select()哪個(gè)發(fā)生事件就讀取

40、哪個(gè)!成都信息工程學(xué)院67int EventFd2, MaxFd, i;fd_set EventReadFd;EventFd0 = 1; / 鍵盤的描述字EventFd1 = SocketFd; / TCP連接的描述字 MaxFd = EventFd0和EventFd1的最大值 + 1;FD_ZERO(&EventReadFd); / 清除EventReadFdfor (i = 0; i 2; i+) FD_SET(EventFdi, &EventReadFd); / 設(shè)置EventReadFd,排列事件順序select(MaxFd, &EventReadFd, NUL

41、L, NULL, NULL); / 等待事件到達(dá)for (i = 0; i MAX_EVENT_NUMBER; i+) if (FD_ISSET(EventFdi, &EventReadFd) / 看看是哪個(gè)事件 switch (i) case 0: read(1); break; / 鍵盤事件(字節(jié)到達(dá)) case 1: read(SocketFd); break; / 網(wǎng)絡(luò)事件(數(shù)據(jù)到達(dá)) 成都信息工程學(xué)院68還有一個(gè)問題:還有一個(gè)問題:從鍵盤讀取一個(gè)字串從鍵盤讀取一個(gè)字串怎么做怎么做?第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都信息工程學(xué)院69第五章第五章 SOCKE

42、T API 應(yīng)用實(shí)例應(yīng)用實(shí)例A傳輸?shù)奈淖肿执畁F傳輸?shù)奈募奈募鹡(字串)En第一個(gè)字符是命令類型之后的字符串稱為命令屬性字成都信息工程學(xué)院70第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例char ReadKeyString(char *pCommand) 函數(shù)功能:從鍵盤讀取命令類型和命令屬性字返回值:命令類型代碼參數(shù):存放命令屬性字的緩沖區(qū)地址成都信息工程學(xué)院71第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例read(鍵盤)char buf1024;int len;len = read(1, buf, ?);char ReadKeyString(char *pCommand

43、) char c = 0, cCommand; int i = 0; / 當(dāng)前字符下標(biāo) read(1, &cCommand, 1); / 第一個(gè)字節(jié),既是命令類型編碼AFE while (c != n & i 0) *(pCommand + i -1) = 0; else *(pCommand + i) = 0;char StrBuf200;char Comm;Comm = ReadKeyString(&StrBuf);len = read(1, buf, 1);i由哪個(gè)程序調(diào)用?由哪個(gè)程序調(diào)用?成都信息工程學(xué)院72第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例c

44、har ReadKeyString(char *pCommand) char c, cCommand; int i = 0; switch (cCommand) case A: return CLI_KEY_A_COMMAND; case F: return CLI_KEY_F_COMMAND; case E: return CLI_KEY_E_COMMAND; default: return CLI_ERROR_COMMAND; 成都信息工程學(xué)院73第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例#define MAX_EVENT_NUMBER 2char GetCommand(int

45、SocketFd, char *pCommand)intEventFdMAX_EVENT_NUMBER;fd_setEventReadFd;intMaxFd;inti;char cCommand;EventFd0 = 1;/ 鍵盤的文件描述字EventFd1 = SocketFd;/ 連接的文件描述字/ 上面行的次序很重要MaxFd = EventFd0;if (EventFd1 MaxFd) MaxFd = EventFd1;MaxFd+;成都信息工程學(xué)院74第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例again_get_command:FD_ZERO(&EventReadF

46、d);/ 清除文件描述符for (i = 0; i MAX_EVENT_NUMBER; i+) FD_SET(EventFdi, &EventReadFd);select(MaxFd, &EventReadFd, NULL, NULL, NULL);for (i = 0; i MAX_EVENT_NUMBER; i+) if (FD_ISSET(EventFdi, &EventReadFd) switch (i) case 0: / 鍵盤事件排在第一位cCommand = ReadKeyString(pCommand);switch (cCommand) case CL

47、I_KEY_A_COMMAND: case CLI_KEY_F_COMMAND: case CLI_KEY_E_COMMAND:return cCommand;成都信息工程學(xué)院75第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例 default:printf(n命令不詳,請(qǐng)重新輸入!nn);goto again_get_command;/ 命令不詳,請(qǐng)重新輸入!break; case 1: / 連接事件return CLI_CONN_ABORT;/ 網(wǎng)絡(luò)故障 成都信息工程學(xué)院76遠(yuǎn)程文件和文字傳輸遠(yuǎn)程文件和文字傳輸細(xì)流程設(shè)計(jì)細(xì)流程設(shè)計(jì)第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例成都

48、信息工程學(xué)院77第五章第五章 SOCKET API 應(yīng)用實(shí)例應(yīng)用實(shí)例1.從命令行參數(shù)argv獲得服務(wù)器的IP地址和服務(wù)器端口號(hào)碼;2.試圖和服務(wù)器建立連接,如不成功則提示網(wǎng)絡(luò)故障并結(jié)束; gethostbyname:判斷IP地址合法性等; socket獲得本地套接字; connect用本地套接字去試圖和服務(wù)器建立連接。 3.進(jìn)入連接建立狀態(tài)(CurrentState = CLI_CONN_OK_STATE);4.把TCP連接的套接字描述字和鍵盤的描述字組成事件排列,等待事件的到來(lái);5.通過select和ReadKeyString 獲得鍵盤事件;/ 回車作為命令字串的結(jié)束 FD_ISSET分析是鍵盤事件還是網(wǎng)絡(luò)連接事件,網(wǎng)絡(luò)事件則認(rèn)為故障了; 如是鍵盤事件,再用ReadKeyString從鍵盤讀取字串并分析出命令來(lái);6.分析鍵盤命令(事件):A命令:F命令:Q命令:連接流產(chǎn):客戶機(jī)成都信息工程學(xué)院786.6.分析鍵盤命令(事件):分析鍵盤命令(事

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論