FTP客戶端和服務(wù)器源代碼C語言實(shí)現(xiàn)_第1頁
FTP客戶端和服務(wù)器源代碼C語言實(shí)現(xiàn)_第2頁
FTP客戶端和服務(wù)器源代碼C語言實(shí)現(xiàn)_第3頁
FTP客戶端和服務(wù)器源代碼C語言實(shí)現(xiàn)_第4頁
FTP客戶端和服務(wù)器源代碼C語言實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(jì):FTP的設(shè)計(jì)與實(shí)現(xiàn)/*dient.c*/#include<winsock2.h>#include<stdio.h>#include<stdlib.h>#pragmacomment(lib,"ws2_32.lib")#defineDEFAULT_PORT2302#defineDEFAULT_BUFFER2048#defineDEFAULT_MESSAGE"ThisisatestoftheemergencybroadcastingsystemcharszServerip128,/ServertoconnecttoszMes

2、sage1024;/MessagetosendtoseverintiPort=DEFAULT_PORT;/Portonservertoconnectto/DWORDdwCount=DEFAULT_COUNT;NumberoftimestosendmessageBOOLbSendOnly=FALSE;/Senddataonly;don'treceiveintdirfun();intgetfun();intputfun();intpwdfun();intcdfun();intmdfun();intdelfun();intusafun();voidusage()printf("us

3、age:client-p:x-s:IP-n:x-onn");printf("-p:xRemoteporttosendton");printf("-s:IPServer'sIPaddressorhostnamen");printf("-n:xNumberoftimestosendmessagen");printf("-oSendmessagesonly;don'treceiven");ExitProcess(1);voidValidateArgs(intargc,char*argv)inti

4、;for(i=1;i<argc;i+)if(argvi0='-')|(argvi0='/')switch(tolower(argvi1)case'p':/Remoteportif(strlen(argvi)>3)iPort=atoi(&argvi3);break;case's':/Serverif(strlen(argvi)>3)strcpy(szServerip,&argvi3);break;case'n':/Numberoftimestosendmessageif(strlen

5、(argvi)>3)/dwCount=atol(&argvi3);break;case'o':/Onlysendmessage;don'treceivebSendOnly=TRUE;break;default:usage();break;intmain(intargc,char*argv)WSADATAwsd;SOCKETsClient;charszBufferDEFAULT_BUFFER;intret;/unsignedinti;/intj;structsockaddr_inserver;structhostent*host=NULL;charchoic

6、e5,choice240;/ParsethecommandlineandloadWinsock/argv1="-s:"strcpy(szServerip,&argv13);/ValidateArgs(argc,argv);if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)printf("FailedtoloadWinsocklibrary!n");return1;/strcpy(szMessage,DEFAULT_MESSAGE);/Createthesocket,andattempttoconn

7、ecttotheserver/sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(sClient=INVALID_SOCKET)printf("socket()failed:%dn",WSAGetLastError();return1;server.sin_family=AF_INET;server.sin_port=htons(iPort);printf("server.sin_port=%un",server.sin_port);server.sin_addr.s_addr=inet_addr(szS

8、erverip);/Ifthesuppliedserveraddresswasn'tintheform/"aaa.bbb.ccc.ddd"it'sahostname,sotrytoresolveit/if(server.sin_addr.s_addr=INADDR_NONE)host=gethostbyname(szServerip);if(host=NULL)printf("Unabletoresolveserver:%sn",szServerip);return1;CopyMemory(&server.sin_addr,hos

9、t->h_addr_list0,host->h_length);if(connect(sClient,(structsockaddr*)&server,sizeof(server)=SOCKET_ERROR)printf("connect()failed:%dn",WSAGetLastError();return1;/顯示接通信息/for(j=0;j<2;j+)/ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0);if(ret=0)/Gracefulclosereturn0;(printf("recv(

10、)failed:%dn",WSAGetLastError();return0;szBufferret='0'printf("%sn",szBuffer);if(ret<15)(ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0);if(ret=0)/Gracefulclosereturn0;elseif(ret=SOCKET_ERROR)(/printf("recv()failed:%dn",WSAGetLastError();return0;szBufferret='0'

11、printf("%sn",szBuffer);/printf("DEFAULT_BUFFER=%dn",DEFAULT_BUFFER);while(1)(puts("");printf("ftp>");scanf("%s",choice);if(strncmp(choice,"dir",3)=0|strncmp(choice,"DIR",2)=0)(dirfun(sClient);continue;elseif(strncmp(choice,&quo

12、t;pwd",3)=0|strncmp(choice,"PWD",3)=0)(pwdfun(sClient);continue;elseif(strncmp(choice,"?",1)=0)(usafun(sClient);continue;)elseif(strncmp(choice,"quit",4)=0|strncmp(choice,"QUIT",2)=0)(break;)scanf("%s",choice2);if(strncmp(choice,"get",

13、3)=0|strncmp(choice,"GET",3)=0)(getfun(sClient,choice2);continue;)elseif(strncmp(choice,"put",3)=0|strncmp(choice,"PUT",3)=0)(putfun(sClient,choice2);continue;)elseif(strncmp(choice,"cd",2)=0|strncmp(choice,"CD",2)=0)(cdfun(sClient,choice2);continue;

14、)elseif(strncmp(choice,"md",2)=0|strncmp(choice,"MD",2)=0)(mdfun(sClient,choice2);continue;)elseif(strncmp(choice,"del",3)=0|strncmp(choice,"DEL",3)=0)(delfun(sClient,choice2);continue;)/elseputs("輸入錯(cuò)誤,請(qǐng)重新輸入");fflush(stdin);fflush(stdin);printf("

15、;n");printf("n");)closesocket(sClient);WSACleanup();return0;)intdirfun(SOCKETsClient)(intret;char*MSG="dir$"charszBuffer80;strcpy(szMessage,MSG);ret=send(sClient,szMessage,strlen(szMessage),0);if(ret=0)return1;elseif(ret=SOCKET_ERROR)(printf("send()failed:%dn",WSAG

16、etLastError();return1;)/printf("Send%dbytesn",ret);printf("bSendOnly=%dn",bSendOnly);while(!bSendOnly)(/讀取流并顯不/ret=recv(sClient,szBuffer,80,0);/printf("%s",szBuffer);ret=recv(sClient,szBuffer,80,0);if(ret=0)/Gracefulclosereturn1;elseif(ret=SOCKET_ERROR)(printf("rec

17、v()failed:%dn",WSAGetLastError();return1;)szBufferret='0'if(strncmp(szBuffer,"226Close",strlen("226Close")=0)(break;)printf("%s",szBuffer);if(strncmp(szBuffer,"500Syntaxerror",strlen("500Syntaxerror")=0)(break;)return0;)intgetfun(SOCKETs

18、Client,charfilename40)(intret;FILE*fpre;charszBuffer80;szMessage0='0'strcat(szMessage,"get$");strcat(szMessage,"");strcat(szMessage,filename);/printf("MSG4=%cn",szMessage4);/szMessage0='g'szMessage1='e'szMessage2='t'/szMessage4='m'

19、;szMessage5='e'szMessage6='.'szMessage7='t'/szMessage8='x'szMessage9='t'szMessage10='0'ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return1;elseif(ret=SOCKET_ERROR)(printf("send()failed:%dn",WSAGetLastError();return1;)printf(&qu

20、ot;Send%dbytesn",ret);ret=recv(sClient,szBuffer,80,0);/*if(ret=0)/Gracefulclosebreak;elseif(ret=SOCKET_ERROR)(printf("recv()failed:%dn",WSAGetLastError();break;*/szBufferret='0'printf("%sn",szBuffer);if(strncmp(szBuffer,"125Transfering",strlen("125Tran

21、sfering.")=0)(if(fpre=fopen(filename,"w")=NULL)(printf("openerrer");return1;)printf("bSendOnly=%dn",bSendOnly);while(!bSendOnly)(/讀取流并顯不ret=recv(sClient,szBuffer,80,0);if(ret=0)/Gracefulclosereturn1;elseif(ret=SOCKET_ERROR)(printf("recv()failed:%dn",WSAGe

22、tLastError();return1;)szBufferret='0'printf("%s",szBuffer);if(strncmp(szBuffer,"226Transfer",strlen("226Transfer")=0)(break;)if(strncmp(szBuffer,"500Syntaxerror",strlen("500Syntaxerror")=0)(break;)fprintf(fpre,"%s",szBuffer);)printf

23、("%sn",szBuffer);fclose(fpre);)return0;)intputfun(SOCKETsClient,charfilename40)(intret;/inti;FILE*fpse;char"filename;/char*MSG="get0me.txt"charszBuffer80,temp_buffer80;/sprintf(szMessage,"get0","te.txt0");szMessage0='0'strcat(szMessage,"put$&

24、quot;);strcat(szMessage,filename);ret=send(sClient,szMessage,strlen(szMessage)+1,0);return0;elseif(ret=SOCKET_ERROR)(printf("send()failed:%dn",WSAGetLastError();return1;/printf("Send%dbytesn",ret);/filename="me.txt"printf("filename=%sn",filename);if(fpse=fopen

25、(filename,"r")=NULL)(printf("openerrer");return1;else(printf("Thefile%sfound,readytotransfer.n",filename);/i=0;while(fgets(temp_buffer,80,fpse)!=NULL)(sprintf(szBuffer,"%s",temp_buffer);send(sClient,szBuffer,80,0);sprintf(szBuffer,"226Transfercompleted.rn

26、");ret=send(sClient,szBuffer,strlen(szBuffer),0);fclose(fpse);return0;intpwdfun(SOCKETsClient)(intret;char*MSG="pwd$"charszBuffer160;strcpy(szMessage,MSG);ret=send(sClient,szMessage,strlen(szMessage),0);if(ret=0)return1;elseif(ret=SOCKET_ERROR)(printf("send()failed:%dn",WSAG

27、etLastError();return1;printf("Send%dbytesn",ret);printf("bSendOnly=%dn",bSendOnly);while(!bSendOnly)(/讀取流并顯不ret=recv(sClient,szBuffer,160,0);if(ret=0)/Gracefulclosereturn1;elseif(ret=SOCKET_ERROR)(printf("recv()failed:%dn",WSAGetLastError();return1;szBufferret='0

28、9;printf("%sn",szBuffer);if(strncmp(szBuffer,"226Close",strlen("226Close")=0)(break;if(strncmp(szBuffer,"500Syntaxerror",strlen("500Syntaxerror")=0)(break;return0;intcdfun(SOCKETsClient,charpathname40)(intret;szMessage0='0'strcat(szMessage,&q

29、uot;cd$");strcat(szMessage,pathname);ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return1;elseif(ret=SOCKET_ERROR)(printf("send()failed:%dn",WSAGetLastError();return1;printf("Send%dbytesn",ret);return0;intmdfun(SOCKETsClient,charpathname20)(intret;charszBuffer1

30、60;char*MSG="md$"szMessage0='0'strcat(szMessage,"md$");strcat(szMessage,"");strcat(szMessage,pathname);/strcpy(szMessage,MSG);ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return1;elseif(ret=SOCKET_ERROR)(printf("send()failed:%dn",WSAGetLa

31、stError();return1;)printf("Send%dbytesn",ret);while(!bSendOnly)(/讀取流并顯不ret=recv(sClient,szBuffer,80,0);if(ret=0)/Gracefulclosereturn1;elseif(ret=SOCKET_ERROR)(printf("recv()failed:%dn",WSAGetLastError();return1;)szBufferret='0'printf("%s",szBuffer);if(strncmp(sz

32、Buffer,"226Close",strlen("226Close")=0)(break;)if(strncmp(szBuffer,"500Syntaxerror",strlen("500Syntaxerror")=0)(break;)return0;)intdelfun(SOCKETsClient,charname20)(intret;charszBuffer80;szMessage0='0'strcat(szMessage,"del$");strcat(szMessage,

33、name);ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return1;elseif(ret=SOCKET_ERROR)(printf("send()failed:%dn",WSAGetLastError();return1;)printf("Send%dbytesn",ret);while(!bSendOnly)(ret=recv(sClient,szBuffer,80,0);if(ret=0)/Gracefulclosereturn1;elseif(ret=SOCKET_ERR

34、OR)(printf("recv()failed:%dn",WSAGetLastError();return1;)szBufferret='0'if(strncmp(szBuffer,"delok",strlen("delok")=0)(printf("del%sokn",name);break;)printf("%s",szBuffer);if(strncmp(szBuffer,"500Syntaxerror",strlen("500Syntaxe

35、rror")=0)(break;)intusafun()(puts("");puts("get:取遠(yuǎn)方的一個(gè)文件");puts("put:傳給遠(yuǎn)方一個(gè)文件");puts("pwd:顯示遠(yuǎn)主當(dāng)前目錄");puts("dir:列出遠(yuǎn)方當(dāng)前目錄");puts("md:在遠(yuǎn)方新建文件夾");puts("cd:改變遠(yuǎn)方當(dāng)前目錄");puts("?:顯示你提供的命令");puts("quit:退出返回");return

36、0;)/intquit()/*server.c*/#include<stdio.h>#include<winsock.h>#include<stdlib.h>#pragmacomment(lib,"ws2_32.lib")WSADATAwsd;charsbuffer80,rbuffer80;/sendandreceivebuffersintn,bytes;/countersSOCKETnewsocket,ns_data;structsockaddr_inremoteaddr;/remoteaddr_data;intport_connect

37、=0;/portconnectflagcharpath80=""charorder100=""/SOCKETs_data_port;intsy_error=1;/useforindicateSyntaxerror/serverfunctionsintsdirfun(SOCKETnewsocket);intsgetfun(SOCKETnewsocket);intsputfun(SOCKETnewsocket);intspwdfun(SOCKETnewsocket);intscdfun(SOCKETnewsocket);intsmdfun(SOCKETnew

38、socket);intsdelfun(SOCKETnewsocket);voidHandleError(char*func);/serverfunctionsend/MAINintmain(intargc,char*argv口)portstructsockaddr_inlocaladdr;/localaddressstructureSOCKETs;/s_data;/welcomesocketandwelcomesocketfordataconnection,andconnectionforconnecttoclientintaddr_inlen;/addresslenghtvariableif

39、(WSAStartup(MAKEWORD(2,2),&wsd)!=0)WSACleanup();printf("WSAStartupfailedn");memset(&localaddr,0,sizeof(localaddr);/clearlocaladdrs=socket(PF_INET,SOCK_STREAM,0);if(s<0)printf("socketfailedn");localaddr.sin_family=AF_INET;if(argc=2)localaddr.sin_port=htons(u_short)atoi(

40、argv1);elselocaladdr.sin_port=htons(2302);localaddr.sin_addr.s_addr=INADDR_ANY;if(bind(s,(structsockaddr*)(&localaddr),sizeof(localaddr)<0)printf("Bindfailed!n");)/INFINITELOOPwhile(1)/whileloop1/LISTENlisten(s,3);%daddr_inlen=sizeof(remoteaddr);/ACCEPTmainconnection(controlconnecti

41、on)newsocket=accept(s,(structsockaddr*)(&remoteaddr),&addr_inlen);if(newsocket=INVALID_SOCKET)break;printf("connectedto%satportn",inet_ntoa(remoteaddr.sin_addr),ntohs(localaddr.sin_port);/Respondwithwelcomemessage,FTPclientrequiresthosesprintf(sbuffer,"200Welcomern");byte

42、s=send(newsocket,sbuffer,strlen(sbuffer),0);sprintf(sbuffer,"530Loginrn");bytes=send(newsocket,sbuffer,strlen(sbuffer),0);/INFINITELOOPwhile(1)/whileloop2n=0;sy_error=1;while(1)/whileloop3/RECEIVEbytes=recv(newsocket,&rbuffern,1,0);printf("rbuffer%d=%cn",n,rbuffern);if(bytes&

43、lt;0)|(bytes=0)break;if(rbuffern='$')(rbuffern='0'break;if(rbuffern!='r')n+;/endofwhileloop3if(bytes<0)|(bytes=0)break;printf("#TheServerreceives:#'%s'fromclientn",rbuffer);/THEFTPCOMMANDSHERE/LISTif(strncmp(rbuffer,"dir",3)=0)(sdirfun(newsocket

44、);/當(dāng)前目錄if(strncmp(rbuffer,"pwd",3)=0)(spwdfun(newsocket);/改變目錄if(strncmp(rbuffer,"cd",2)=0)(scdfun(newsocket);/GETif(strncmp(rbuffer,"get",3)=0)(sgetfun(newsocket);/PUTif(strncmp(rbuffer,"put",3)=0)(sputfun(newsocket);/MDif(strncmp(rbuffer,"md",2)=0)

45、(smdfun(newsocket);)if(strncmp(rbuffer,"del",3)=0)(sdelfun(newsocket);)/QUITif(strncmp(rbuffer,"quit",4)=0)(printf("quit'n");sprintf(sbuffer,"221Byebyern");bytes=send(newsocket,sbuffer,strlen(sbuffer),0);sy_error=0;break;)/Syntaxerrorif(sy_error=1)(printf(

46、"commandunrecognized,non-implemented!n");sprintf(sbuffer,"500Syntaxerror.n");bytes=send(newsocket,sbuffer,strlen(sbuffer),0);)/endofwhileloop2/CLOSECONTROLSOCKETclosesocket(newsocket);controlprintf("disconnectedfrom%satport%d,closesocket.n",inet_ntoa(remoteaddr.sin_addr

47、),ntohs(localaddr.sin_port);/endofwhileloop1/CLOSEWELCOMESOCKETclosesocket(s);printf("Welcomesocketsclose");return0;intsdirfun(SOCKETnewsocket)chartemp_buffer80;printf("Equivalenttodirn");order0='0'strcat(order,"dir");strcat(order,path);strcat(order,">tm

48、p.txt");system(order);FILE*fin;fin=fopen("tmp.txt","r");sprintf(sbuffer,"125Transfering.rn");bytes=send(newsocket,sbuffer,strlen(sbuffer),0);while(fgets(temp_buffer,80,fin)!=NULL)sprintf(sbuffer,"%s",temp_buffer);/if(port_connect=0)send(newsocket,sbuffer,

49、strlen(sbuffer),0);fclose(fin);sprintf(sbuffer,"226Transfercompleted.rn");bytes=send(newsocket,sbuffer,strlen(sbuffer),0);system("deltmp.txt");/CLOSEthens_dataSOCKETordataportSOCKETif(port_connect=0)closesocket(ns_data);sprintf(sbuffer,"226Closethedatasocket.rn");bytes=

50、send(newsocket,sbuffer,strlen(sbuffer),0);ns_data=socket(AF_INET,SOCK_STREAM,0);sy_error=0;return0;intsgetfun(SOCKETnewsocket)printf("RETRmode.rn");inti=4,k=0;charfilename20,temp_buffer80;/identifythefilenamefromrbufferaftertheword"RETR'while(1)/whileloop4/RECEIVEbytes=recv(newsoc

51、ket,&rbufferi,1,0);printf("rbufferi=%cn",rbufferi);if(bytes<0)|(bytes=0)break;filenamek=rbufferi;if(rbufferi='0')/*endonLF*/filenamek='0'break;if(rbufferi!='r')i+;k+;/*ignoreCR's*/endofwhileloop4order0='0'strcat(order,path);if(strlen(path)>0)st

52、rcat(order,"");strcat(order,filename);char*p_filename=order;FILE*fp;if(fp=fopen(p_filename,"r")=NULL)sprintf(sbuffer,"Sorry,cannotopen%s.Pleasetryagain.rn",filename);bytes=send(newsocket,sbuffer,strlen(sbuffer),0);sprintf(sbuffer,"226Transfercompleted.rn");byt

53、es=send(newsocket,sbuffer,strlen(sbuffer),0);return1;elseprintf("Thefile%sfound,readytotransfer.n",filename);sprintf(sbuffer,"125Transfering.rn");bytes=send(newsocket,sbuffer,strlen(sbuffer),0);while(fgets(temp_buffer,80,fp)!=NULL)sprintf(sbuffer,"%s",temp_buffer);/if(p

54、ort_connect=0)/endofwhilefclose(fp);sprintf(sbuffer,"226Transfercompleted.rn");bytes=send(newsocket,sbuffer,strlen(sbuffer),0);sy_error=0;return0;intsputfun(SOCKETnewsocket)printf("Equivalenttoput.n");inti=4,k=0;charfilename20;/identifythefilenamefromrbufferaftertheword"RETR

55、'while(1)bytes=recv(newsocket,&rbufferi,1,0);if(bytes<0)|(bytes=0)break;filenamek=rbufferi;if(rbufferi='0')/*endonLF*/filenamek='0'break;if(rbufferi!='r')i+;k+;/*ignoreCR's*/endofwhileorder0='0'strcat(order,path);if(strlen(path)>0)strcat(order,"

56、");strcat(order,filename);printf("filename=%s,",order);char*p_filename=order;FILE*fpse;if(fpse=fopen(order,"w")=NULL)printf("openerrer");return1;)else(printf("Thefile%sfound,readytotransfer.n",filename);while(1)(/讀取流并顯不intret;ret=recv(newsocket,rbuffer,80

57、,0);if(ret=0)/Gracefulclosereturn0;elseif(ret=SOCKET_ERROR)(printf("recv()failed:%dn",WSAGetLastError();return0;)if(strncmp(rbuffer,"226Transfer",strlen("226Transfer")=0)(break;)fprintf(fpse,"%s",rbuffer);)printf("RBUFFER=%s",rbuffer);fclose(fpse);)s

58、y_error=0;return0;)intspwdfun(SOCKETnewsocket)(printf("Equivalenttopwdn");/order0='0'/strcat(order,"dir");/strcat(order,path);/strcat(order,);system("cd>tmp.txt");FILE*fin;fin=fopen("tmp.txt","r+");sprintf(sbuffer,"125Transfering.rn&q

59、uot;);bytes=send(newsocket,sbuffer,strlen(sbuffer),0);chartemp_buffer160;while(fgets(temp_buffer,80,fin)!=NULL)(temp_bufferstrlen(temp_buffer)-1='0'printf("temp_buffer=%s",temp_buffer);/目錄判定if(path0!='0')sprintf(sbuffer,"%s%s",temp_buffer,path);elsesprintf(sbuffer

60、,"%s",temp_buffer);/if(port_connect=0)send(ns_data,sbuffer,strlen(sbuffer),0);send(newsocket,sbuffer,strlen(sbuffer),0);fclose(fin);sprintf(sbuffer,"226Transfercompleted.rn");bytes=send(newsocket,sbuffer,strlen(sbuffer),0);system("deltmp.txt");/CLOSEthens_dataSOCKETordataportSOCKETif(port_

溫馨提示

  • 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)論