linux基于socket下的簡(jiǎn)單聊天室_第1頁
linux基于socket下的簡(jiǎn)單聊天室_第2頁
linux基于socket下的簡(jiǎn)單聊天室_第3頁
linux基于socket下的簡(jiǎn)單聊天室_第4頁
linux基于socket下的簡(jiǎn)單聊天室_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、不得用于商業(yè)用途僅供個(gè)人參考Linux操作系統(tǒng)與程序設(shè)計(jì)課程設(shè)計(jì)*報(bào)告書姓名:學(xué)號(hào):班級(jí):專業(yè):指導(dǎo)老師:郭玉華計(jì)算機(jī)學(xué)院時(shí)間:2013年7月5日僅供個(gè)人參考不得用于商業(yè)用途一、課程設(shè)計(jì)目的本次課設(shè)主要是為了加強(qiáng)對(duì)Linux系統(tǒng)下的編程的各種知識(shí)點(diǎn)的整合與靈活運(yùn)用,讓我們更加熟悉Linux下的編程操作。重點(diǎn)在Linux下socket編程,了解TCP、UDP等協(xié)議的使用,并完成課設(shè)題目。二、課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境硬件:PC機(jī)兩臺(tái)以上軟件:LINUX系統(tǒng)VIM編譯器,F(xiàn)edora三、課程設(shè)計(jì)總體要求在LINUX下實(shí)現(xiàn)網(wǎng)絡(luò)聊天,包括公聊、一對(duì)多私聊等功能;2實(shí)現(xiàn)客戶端之間經(jīng)網(wǎng)絡(luò)傳輸文件;3保存聊天記錄,

2、以備必要時(shí)查詢。系統(tǒng)功能系統(tǒng)主要實(shí)現(xiàn)4大聊天室功能:注冊(cè)與登錄系統(tǒng)公聊私聊文件傳輸模塊調(diào)用關(guān)系各模塊間調(diào)用關(guān)系如圖2-2所示:圖2-2各模塊間調(diào)用關(guān)系功能需求與系統(tǒng)模塊的關(guān)系實(shí)現(xiàn)原理、注冊(cè)、登陸實(shí)現(xiàn)原理服務(wù)器端服務(wù)器端建立好socket,等待連接,當(dāng)客戶端連接服務(wù)器,服務(wù)器接收連接,并接受客戶端發(fā)送過來的消息,根據(jù)接收到的結(jié)構(gòu)體所攜帶的協(xié)議來做相應(yīng)的功能。服務(wù)器端啟動(dòng)后如圖3-1所示ILJCliAUU.mo罐loelhostchat#./server4321綁定端口喪做血口同號(hào)被占用raotlocalhostchat#./server1122正在監(jiān)臨中.l.ra指定客戶竊,2關(guān)閉眠務(wù)器川顯示在

3、線客戶端請(qǐng)輸入仰踢出去的客戶喘名字:1.T除福定客戶喘.2.關(guān)閉脈務(wù)卷打.顯示在銭客戶端圖3-1服務(wù)器端界面1、注冊(cè):如果協(xié)議為reg,則為客戶端注冊(cè),首先將發(fā)送過來的結(jié)構(gòu)體,提取用戶名和密碼,然后需要對(duì)用戶名合法性檢驗(yàn),驗(yàn)證之后如果用戶名合法則將用戶信息保存到文件中,合法性的規(guī)則包括用戶名不能重復(fù)和不能使用all等協(xié)議作為用戶名,并且用戶名和密碼都不能為空。如果注冊(cè)成功,服務(wù)器端發(fā)送一個(gè)消息給注冊(cè)的客戶端,同樣將消息保存在一個(gè)結(jié)構(gòu)體里。如果失敗,也給客戶端發(fā)送一個(gè)消息如“您輸入的用戶名不能為all”或者“用戶名XX已經(jīng)存在”。注冊(cè)結(jié)果如圖3-2所示。heused-roQttocalhostc

4、hat#./匚1_亠已”1_127QQ.11122選捋怖翌執(zhí)行的帰作登錄2-注冊(cè)新用戶遅岀界E糅輸A懷的用戶備:詩輸入.密碼:you:e詩冉次輸入空碼:passyou:e正在等待服箝稠應(yīng)答.援到冃恨勞冊(cè)卷來的信總:注冊(cè)或功roQt(alocaLhostchat#.圖3-2注冊(cè)新用戶2、登錄:如果協(xié)議為1ogin,則將用戶名和密碼信息提取,再遍歷存放用戶信息文件里的用戶名和密碼,直到驗(yàn)證成功為止,如果驗(yàn)證成功則對(duì)所有在線的用戶發(fā)送一條消息:“提示XX用戶登錄成功”;如果失敗則只給登陸失敗的客戶端提示登錄失敗,并給出原因,如“用戶名不存在”或者“用戶名或者密碼輸入錯(cuò)誤”,并跳轉(zhuǎn)到相應(yīng)的代碼執(zhí)行其他

5、功能,成功則等待發(fā)送客戶端消息,失敗則關(guān)閉socket并結(jié)束線程,如圖3-3所示rcotlcalhostchat#./client1122選擇你妾執(zhí)行的操柞1登錄注冊(cè)新用戶退出界面請(qǐng)輸入你的用戶:S:請(qǐng)輸入解碼:正在等待版務(wù)辭應(yīng)答搖到服務(wù)喬發(fā)來的信息:登錄竝功!標(biāo)志信息為:all圖3-3用戶登錄3、監(jiān)聽和踢出客戶端:通過查看和修改綁定的socket和在線用戶隊(duì)列實(shí)現(xiàn)查看和踢出在線用戶,提出用戶后向被踢出用戶發(fā)送相關(guān)信息,如圖3-4所示。*rr*iufjehiri.*7rootlocalhostchat#./server1122正在監(jiān)昕中.L,T除攔定賓戶端2.關(guān)閉眼養(yǎng)粽川.顯

6、示在蜒客戶購(gòu)與127.0.0.l:4G697ifgjfwritefilesiieces窖戶喘宕退出與127.-0.1:406981接建立成紳與127he.1:461751建立威Jf)1,e2-qi.tjg定客戶端2.關(guān)團(tuán)服番as”.顯示在線.客戶媾圖3-4顯示當(dāng)前在線用戶這里從服務(wù)器端發(fā)回給客戶端的消息使用sprintf到一個(gè)字符串來發(fā)送??蛻舳丝蛻舳说妮斎牒拖⒌娘@示要使用2個(gè)終端,一個(gè)client,一個(gè)是Display。Client終端為輸入的界面,在這個(gè)界面里,新建一個(gè)線程來接受服務(wù)器端發(fā)來的消息,再添加時(shí)間信息,并將這些信息寫入文件,然后給Display進(jìn)程發(fā)送一個(gè)消息,Display

7、進(jìn)程接到消息,就去讀取文件,并將這些數(shù)據(jù)顯示在Display終端。打開客戶端Display終端界面,用lseek將內(nèi)部指針指向文件末尾,等待Client終端里的線程將消息寫入文件。一旦有消息過來,就去文件里讀取數(shù)據(jù)并打印在Display終端。打開客戶端Client終端界面,有3個(gè)菜單,一個(gè)注冊(cè)、一個(gè)登陸、一個(gè)退出,選擇相應(yīng)項(xiàng)即可進(jìn)行相關(guān)操作,注冊(cè)和登錄如圖匚hat#.clientU7.Q.Q.L口ZZ選擇你要執(zhí)行的按柞令錄瀆冊(cè)祈帯戶退岀界面請(qǐng)術(shù)入你的用戶名;&請(qǐng)輸入密碼!yOup甘5合:&晴樹次輸入密瑪:epassyou:e正在等待眶芳器府轎選拝你餐執(zhí)庁的操作登錄2一注冊(cè)斷用戶3.退出界面1請(qǐng)

8、輸入飾的用戶名:e請(qǐng)輸入陪碼:e正在等待脈務(wù)S3應(yīng)答-揺到販寧HS冴束的使貞:脊杲曲El!服務(wù)器端客戶端發(fā)送給服務(wù)器端使用的協(xié)議:1、all$msg,為給所有人發(fā)送消息。2、直接輸入view$獲得在線用戶列表。3、who$msg,給用戶名為“who”的用戶發(fā)送私聊消息。4、trans$who$filename將文件傳輸給who。5、reg為注冊(cè)。6、login為登陸。私聊實(shí)現(xiàn)原理一、客戶端可以使用who$msg的形式發(fā)送私聊信息,意味著,這個(gè)消息是發(fā)送給who的?;蛘?,先使用who$來切換到發(fā)送私聊消息,這個(gè)時(shí)候,你不需要加上協(xié)議,即可給who這個(gè)用戶發(fā)送消息,如圖3-7、圖3-8所示:接到脈

9、務(wù)番發(fā)來的倍息:登錄戍功!qShello標(biāo)志信息為:qhai標(biāo)志信息為:q圖3-7e向q發(fā)信息root(aiacalho5tchat#./cdEplmyFnJul516:00:092013巳按來的私聊消息:helloFnJul516:00:142013已發(fā)來的私聊消息:hai圖3-8q收到e發(fā)來的消息當(dāng)然,上述方法也可實(shí)現(xiàn)一對(duì)多聊天,如圖3-9所示:FriJuL516:02:062013rJtWA:helloeveryoneFriJul516:92:962013巳發(fā)給所育人:hLLoeveryone圖3-9一對(duì)多聊天這些消息都加上協(xié)議who來封裝成結(jié)構(gòu)體,再發(fā)送給服務(wù)器端。二、服務(wù)器端如果是私

10、聊,則根據(jù)客戶端要發(fā)送到哪個(gè)用戶名的用戶,到鏈表里取得該用戶名的客戶端信息,服務(wù)器再發(fā)送給相應(yīng)的接受信息的客戶端。接受信息的客戶終端就會(huì)先將信息保存到聊天記錄的文件里,并顯示接收到的信息,并且信息前面會(huì)顯示相應(yīng)的提示符。公聊實(shí)現(xiàn)原理一、客戶端客戶端在登陸成功之后,默認(rèn)就是all協(xié)議,可以直接發(fā)送公聊信息,不需要加上任何的協(xié)議,實(shí)現(xiàn)對(duì)所有人的人進(jìn)行聊天。命令為all$msg,給所有人發(fā)送消息?;蛘呦仁褂胊ll$來切換到給所有人發(fā)送消息,切換后,不需要加上協(xié)議即可發(fā)送了,如圖3-10、圖3-11所示:一nJLn*bibijaa-接到脈務(wù)番發(fā)來的信息:登錄成切!聾志信息為:all圖3-10 xdy發(fā)

11、送公聊信息FriJul506:49:282013q發(fā)蛤所肓人:helloFriJul506:49:282013q發(fā)蛤所肓人:hello圖3-11各用戶接收q的公聊信息這些消息都根據(jù)協(xié)議來封裝成結(jié)構(gòu)體,再發(fā)送給服務(wù)器端。二、服務(wù)器端如果是私聊,則根據(jù)客戶端要發(fā)送到哪個(gè)用戶名的用戶,到鏈表里取得該用戶名的客戶端信息,服務(wù)器再發(fā)送給相應(yīng)的接受信息的客戶端。接受信息的客戶終端就會(huì)先將信息保存到聊天記錄的文件里,并顯示接收到的信息,并且信息前面會(huì)顯示相應(yīng)的提示符。文件傳輸實(shí)現(xiàn)原理一、客戶端如果某個(gè)客戶端想發(fā)送文件給其他客戶端,則直接使用命令trans$who$filename。Filename包括本地的

12、路徑和文件名。Trans為協(xié)議,就是標(biāo)志為傳輸文件。Who就是發(fā)送給誰。Filename就是要發(fā)送的文件在本地的文件名。發(fā)送和接收文件如圖3-12、圖3-13所示:!JTB示擊彳吾沖:trans:=trams.a=q/home/dyp/chatztraintxtPs=-irflsagree:transP.dlsagreeiA言戶:rans$q$/home/dyp/chat/tranatxt汞吉信點(diǎn)蕓1-trans圖3-12注冊(cè)與登錄系統(tǒng)實(shí)現(xiàn)1、注冊(cè)的時(shí)候與服務(wù)器的交互過程請(qǐng)輸入你的用戶名:*請(qǐng)輸入密碼:*youpass:*請(qǐng)?jiān)俅屋斎朊艽a:*passyou:*正在等待服務(wù)器應(yīng)答.接到服務(wù)器發(fā)來的

13、信息:注冊(cè)成功!2、登陸的時(shí)候與服務(wù)器的交互過程請(qǐng)輸入你的用戶名:*請(qǐng)輸入密碼:*正在等待服務(wù)器應(yīng)答.接到服務(wù)器發(fā)來的信息:登錄失敗!您還有2次機(jī)會(huì),之后將退出程序!請(qǐng)輸入你的用戶名:*請(qǐng)輸入密碼:*正在等待服務(wù)器應(yīng)答.接到服務(wù)器發(fā)來的信息:登錄成功!3、退出:關(guān)閉socket,退出程序。1/F1、兩個(gè)用戶在私聊功能who$:(聊天內(nèi)容)*Who就是發(fā)送給誰。2、公聊功能all$:(聊天內(nèi)容)*功能實(shí)現(xiàn)展示如下圖4-3-1所示:傳輸文件功能實(shí)現(xiàn)使用trans$who$filename格式傳送文件Filename包括本地的路徑和文件名。Trans為協(xié)議,就是標(biāo)志為傳輸文件。Who就是發(fā)送給誰。F

14、ilename就是要發(fā)送的文件在本地的文件名。本次課程設(shè)計(jì)順利完成了LINUX下聊天室工具的設(shè)計(jì),包括注冊(cè)、登記,私聊,公聊(群聊),傳送文件等功能,送文件時(shí)可以傳送文本。通過本次課程設(shè)計(jì),我的軟件開發(fā)能力在一定程度上提高了,對(duì)LINUX程序設(shè)計(jì)這一門課程也有了比較深刻的了解。實(shí)驗(yàn)過程中遇到了很多問題,剛開始對(duì)于shell一些簡(jiǎn)單的編程都不是很熟悉,通過去圖書館查閱資料,詢問老師和同學(xué),上網(wǎng)查閱資料,才得以解決各個(gè)問題,這個(gè)設(shè)計(jì)基本上完成了老師要求的公聊,私聊以及文件傳輸,但是由于自己能力的有限,沒能做出一個(gè)窗體,讓系統(tǒng)更完美化,這還西藥以后的繼續(xù)努力。附錄/*check.h*/#includ

15、e#include#include#include#include#include#include#include#include#include#defineMAXLEN1024structmessagecharflag15;charname10;intsize;charmsgMAXLEN;intreg_check(structmessage*recievemsg);intlogin_check(structmessage*recievemsg);/*check.c*/#includecheck.hintreg_check(structmessage*recievemsg)intfd;int

16、read_size,write_size;structmessagecmpmsg;if(strlen(recievemsg-name)10|strlen(recievemsg-msg)20)return1;if(strcmp(recievemsg-name,all)=0)return-1;if(strcmp(recievemsg-name,reg)=0)return-1;if(strcmp(recievemsg-name,login)=0)return-1;if(strcmp(recievemsg-name,trans)=0)return-1;if(fd=open(user.txt,O_RDW

17、R|O_CREAT|O_APPEND,0666)0)perror(open);printf(openn);return-2;doif(read_size=read(fd,&cmpmsg,sizeof(cmpmsg)name,)=0)close(fd);return-1;while(read_size=sizeof(structmessage);if(write_size=write(fd,recievemsg,sizeof(structmessage)0)perror(write);close(fd);return-2;while(write_size!=sizeof(s

18、tructmessage)/write_size=0-writesize;lseek(fd,-write_size,SEEK_CUR);write_size=write(fd,recievemsg,sizeof(structmessage);printf(writefilesuccessn);close(fd);return0;intlogin_check(structmessage*recievemsg)intfd;structmessagecmpmsg;intread_size;if(fd=open(user.txt,O_RDONLY)0)perror(open);return-2;doi

19、f(read_size=read(fd,&cmpmsg,sizeof(structmessage)name,)=0)&(strcmp(recievemsg-msg,cmpmsg.msg)=0)close(fd);return0;while(read_size0);close(fd);return-1;/*voidmain()structmessagesendmsg;printf(inputname:n);gets();printf(inputmima:n);gets(sendmsg.msg);printf(%dn,reg_check(&sendms

20、g);/printf(%dn,login_check(&sendmsg);*/*client.c*/#include#include#include#include#include#include#include#include#include#include#include#include#include#include#defineMAXLEN1024structmessagecharflag15;charname10;intsize;charmsgMAXLEN;structmsqlongmsg_type;charmsg_text5;intqid=-1,fd=-1,sockfd,savef

21、ilefd=-1;charfilefromname10;voidhandleQuit(intsignal_no)if(fd0)close(fd);close(sockfd);if(qid0)if(msgctl(qid,IPC_RMID,NULL)0)printf(”消息隊(duì)列無法關(guān)閉n);exit(1);close(savefilefd);printf(程序正常退出n);raise(SIGQUIT);voidcutStr(charstr,charleft,intn,charright,intm,charc)inti,k,j;for(i=0;in;i+)if(stri=c)break;if(i=n

22、)i=-1;elsememset(left,0,strlen(left);for(k=0;ki;k+)leftk=strk;for(j=i+1;jm;j+)if(strj=0)break;rightj-i-1=strj;lefti=0;if(j0)printf(filedata.msg=%sn,filedata.msg);send(sockfd,&filedata,sizeof(structmessage),0);elseprintf(”讀取文件失敗,文件傳輸中止n);break;while(filedata.size0);close(savefilefd);savefilefd=-1;voi

23、dhandlerecvmsg(int*sockfd)intconnfd=*sockfd;intnread;charbuf1024;charstr1024;structmessagerecvmsg;time_ttimep;structmsqmsg;if(fd=open(chatlog.txt,O_RDWR|O_CREAT|O_APPEND)0)printf(打開聊天記錄文件失敗!);exit(1);/printf(%dn,fd);if(qid=msgget(2222,IPC_CREAT|0666)=-1)printf(創(chuàng)建消息隊(duì)列失敗5);exit(1);msg.msg_type=getpid(

24、);strcpy(msg.msg_text,OK);while(1)nread=recv(connfd,&recvmsg,sizeof(structmessage),0);if(nread=0)printf(與服務(wù)器斷開了連接n);close(fd);close(connfd);exit(0);elseif(strcmp(recvmsg.flag,all)=0)time(&timep);sprintf(str,%s%s發(fā)給所有人:%snn,ctime(&timep),,recvmsg.msg);elseif(strcmp(recvmsg.flag,sermsg)=0)t

25、ime(&timep);printf(%s服務(wù)器發(fā)給所有人:snn,ctime(&timep),recvmsg.msg);continue;elseif(strcmp(recvmsg.flag,view)=0)time(&timep);printf(%s當(dāng)前在線客戶端:n%snn,ctime(&timep),recvmsg.msg);continue;elseif(strcmp(recvmsg.flag,trans)=0)pthread_tpid;if(strcmp(recvmsg.msg,agree)=0)strcpy(filefromname,);/創(chuàng)建線程發(fā)送文件

26、pthread_create(&pid,NULL,(void*)handlesendfile,NULL);elseif(strcmp(recvmsg.msg,disagree)=0)printf(對(duì)方拒絕接收文件n);close(savefilefd);savefilefd=-1;elseif(strcmp(recvmsg.msg,noexist)=0)printf(該客戶端不存在5);close(savefilefd);savefilefd=-1;elsestrcpy(filefromname,);printf(”s向你請(qǐng)求傳名%s文件,是否同意接受?agree(同意

27、)ldisagree(不同意)n,,recvmsg.msg);savefilefd=0;continue;elseif(strcmp(recvmsg.flag,transf)=0)intn;if(strcmp(recvmsg.msg,end$)=0)printf(文件傳輸結(jié)束5);close(savefilefd);savefilefd=-1;continue;elsen=write(savefilefd,recvmsg.msg,recvmsg.size);/printf(recvmsg.msg=%sn,recvmsg.msg);while(n0)lseek(savef

28、ilefd,n,SEEK_CUR);n=write(savefilefd,recvmsg.msg,recvmsg.size);continue;elsetime(&timep);sprintf(str,%s%s發(fā)來的私聊消息:%snn,ctime(&timep),,recvmsg.msg);write(fd,str,strlen(str);msgsnd(qid,&msg,sizeof(structmsq),0);intmain(intargc,char*argv)structsockaddr_inserver_addr;intport;intdo_number;stru

29、ctmessagea;charstrMAXLEN;charbufMAXLEN;pthread_tpid;if(argc!=3)printf(請(qǐng)輸入服務(wù)器IP和端口n);exit(1);port=atoi(argv2);if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1)printf(創(chuàng)建socket失敗5);exit(1);signal(SIGINT,handleQuit);printf(n);printf(|n);printf(|inputanumbertowork|n);printf(|t1.loginttt|n);printf(|t2.registert

30、t|n);printf(|t3.exitttt|n);printf(|n);printf(n);scanf(%d,&do_number);gets(str);while(do_number!=1&do_number!=2&do_number!=3)printf(”你輸入的不是上面的選項(xiàng),請(qǐng)重新輸入:n);scanf(%d,&do_number);gets(str);if(do_number=3)close(sockfd);printf(程序已退出!n);exit(0);bzero(&server_addr,sizeof(structsockaddr_in);server_addr.sin_fa

31、mily=AF_INET;server_addr.sin_addr.s_addr=inet_addr(argv1);server_addr.sin_port=htons(port);if(connect(sockfd,(structsockaddr*)&server_addr,sizeof(structsockaddr)=-1)printf(與服務(wù)器無響應(yīng),請(qǐng)隔一段時(shí)間再連接n);exit(2);if(do_number=1)intn=3;while(n)printf(請(qǐng)輸入你的用戶名:n);scanf(%s,);printf(請(qǐng)輸入密碼:n);scanf(%s,a.msg);st

32、rcpy(a.flag,login);/a.flag3=0;send(sockfd,&a,sizeof(a),0);printf(正在等待服務(wù)器應(yīng)答.n);recv(sockfd,buf,MAXLEN,0);printf(接到服務(wù)器發(fā)來的信息:sn,buf);if(strcmp(buf,登錄成功!)=0)/inti,j,k;pthread_create(&pid,NULL,(void*)handlerecvmsg,(void*)&sockfd);gets(str);strcpy(a.flag,all);while(1)memset(a.msg,0,strlen(a.msg);memset(st

33、r,0,strlen(str);gets(str);strcpy(buf,a.flag);cutStr(str,a.flag,15,a.msg,MAXLEN,$);printf(標(biāo)志信息為:sn,a.flag);if(strcmp(a.flag,view)=0)send(sockfd,&a,sizeof(a),0);strcpy(a.flag,buf);continue;elseif(strcmp(a.flag,trans)=0)&(savefilefd=0)/printf(f=%s,a=%s,s=%d,a.flag,a.msg,savefilefd)if(strcmp(a.msg,agree

34、)=0)&(savefilefd=0)charsavefilename20;/charsavefileallname22;printf(請(qǐng)輸入保存的文件名,文件將保存在當(dāng)前目錄下!n);dogets(savefilename);savefilefd=open(savefilename,O_RDWR|O_CREAT|O_EXCL,0666);if(savefilefd=-1)printf(文件名可能存在請(qǐng)重新命名An);while(savefilefd=-1);if(savefilefd0)printf(創(chuàng)建文件失??!n);savefilefd=-1;elsestrcpy(,file

35、fromname);send(sockfd,&a,sizeof(a),0);/printf(agree:%s,%s,%sn,a.flag,,a.msg);elsememset(,0,strlen();memset(str,0,strlen(str);cutStr(a.msg,,10,str,MAXLEN,$);if(str0!=0&0!=0)chartransfileallname22;sprintf(transfileallname,./%s,str);savefilefd=open(str,O_RDWR,0666);if(savefilefd0)printf(打開文件失敗!n);savefilefd=-1;elsememset(a.msg,0,strlen(a.msg);strcpy(a.msg,str);send(sockfd,&a,sizeof(a),0);elsestrcpy(a.msg,disagree);strcpy(,filefromname);send(sockfd,&a,sizeof(a),0);strcpy(a.flag,buf);continue;if(strcmp(a.flag,trans)=0)send(sockfd,&a,sizeof(a),0);elsen

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論