Llinux微型文件传输要点

上传人:痛*** 文档编号:68627838 上传时间:2022-04-03 格式:DOC 页数:38 大小:264.50KB
收藏 版权申诉 举报 下载
Llinux微型文件传输要点_第1页
第1页 / 共38页
Llinux微型文件传输要点_第2页
第2页 / 共38页
Llinux微型文件传输要点_第3页
第3页 / 共38页
资源描述:

《Llinux微型文件传输要点》由会员分享,可在线阅读,更多相关《Llinux微型文件传输要点(38页珍藏版)》请在装配图网上搜索。

1、局域网文件传输系统项目说明需求说明:1,开发平台1.1 linux x86 641.2 支持 Debian Ubuntu1.3 支持 rhel , centos , Fedora2,功能说明1.1 文件上传与下载,讲指定文件上传到服务器,抑从服务器下载文件到指定位置1.2 文件浏览,浏览本地文件以及服务器端文件L3 概要功能说明1.3.1 客户端主要任务:1) 分析用户输入的命令2) 根据命令向服务器端发出请求3) 等待服务器返回的结果表 1 1 命令含义与请求码用户输入的命令命令含义对应的请求码Get从服务器得到文件GETPut向服务器传输文件PUTCd进入客户端的目录不需要与服务端通信,因

2、此无请求!cd进入服务器端目录CDLs列出客户端当前的内容不需要与服务端通信因此无请求Ils列出服务器端当前的内容LSConn ect连接服务器:发出连接请求,不需要服务器额外处理Bye退出程序BYE表 12 命令的格式命令的名称格式说明getget argl arg2oargl:源文件 arg2 :本地路径。argl , arg2 都是绝对路径putput argl argloargl :本地文件 argl:目标路径。argl arg2 都是绝对路径!cd!cd argloargl:指定的服务器目录。绝对路径!ls!ls argloargl 指定的目录。绝对路径conn ectconnect

3、 argloargl:点分十进制 IP 地址cdcd argloargl:客户端的指定目录,绝对路径IsIs argloargl :客户端指定目录,绝对路径byebyeo1.3.2 服务器端主要任务1) 分析请求代码2) 根据请求代码做相应的处理3) 等待返回结果或者应答信息表 13 请求码与相应处理请求代码对应的处理GET向客户端传输文件PUT接受客户端的文件CD进入目录LS将当前目录内容传输给客户端BYE断开连接通信协议与服务器模型:本项目通信协议分两种对于 get 命令和!Is 命令这些需要传输文件 内容的命令(!Is 需要传输列出的目录文件列表),采用四次握手的通信协议如图 1_1 所

4、示传输的文件内容Server图 1_1 四次握手通信协议以 get 命令举例,get 命令首先发出 get 请求,服务器程序接收到请求后,发送请求的文件长度或者错误应答码,接收到文件长度后客户端发送RDY 应答信息,服务器端开始传输文件内容ServerClientServerClientServerClientClient客户端命令应答信息RDY 信息对于!CD 命令这种不需要传输文件内容的命令采取两次握手通信协议,如图客户端命令1 2 所示Clie nt图 1_2 两次握手通信协议本项目服务器采用多线程并发服务器模型,提供和客户端的交互。3,源代码目录结构SvrI-common.h 总领整个

5、服务器程序的头文件I-command.h 定义命令处理函数和初始化函数头文件I-command.c 定义命令处理函数和初始化函数I-main.c 定义程序主干函数1-makefileCliI-comm on .h 总领整个服务器程序的头文件,常用通文件皆放与此I-command.h 定义命令处理函数和初始化函数头文件I-command.c 定义命令处理函数和初始化函数I-main.c 客户端主干函数.I-inputc 定义命令分解函数,用于处理用户输入的命令1-makefile4,核心函数及数据结构定义4.1 客户端int do_co nn ect(char *ip, i nt *sock_f

6、d);与服务器端进行连接int do_get(const char *srczconst char *dst, int sock_fd);从远端服务器下载文件int do_put(const char *srczconst char *dstzint sock_fd);向远端服务器上传文件 int do_cd(char *path); 进入当前主机指定目录 int do_ls(char *path);列出当前主机指定目录下的内容 int do_serv_cd(charpath,int sock_fd);进入远端服务器指定目录int do_serv_ls(char *path, int sock

7、_fd);列出当前服务器目 录信息 intbye(int sock_fd);退出服务器,关闭连接 int split(struct commamdine, char line);拆分命 令相关函数struct comma nd_li nechar *n ame;命令的名称char *argvMAX_ARG;命令携带的参数;1024向服务器端发送命令的最大长度PORT8000端口号COMMANDJJNE256用户输入客户端命令的最大长度MAX LENGTH64每个参数或命令的最大长度ServerClie nt命令执行是否成功Server4.2 服务器int do_get(const char *

8、srczconst char *dstzint sock_fd);处理用户的 put 命令int do_put(const char *srczconst char *dst, int sock_fd);处理用户的 get 命令 int do_cd(char*path);处理用户的! cd 请求int do_ls(char *path);处理用户的!Is 请求ADDR_LEN 17 点分十进制 IP 地址的长度,包括最后的结束符5,客户端执行流程5.1 输出提示信息5.2 接受用户输入的命令5.3 输入命令是否为空,为空则程序正常退出,非空则继续5.4 输入命令是否为 bye,是则程序正常退出

9、,否则继续5.5 处理用户输入的命令5.6 输出提示信息,继续循环执行5.1 5.5 的过程6,服务器执行流程6.1 服务器启动6.2 是否接收到一个连接,是则继续,否则等待6.3 创建连接是否成功,是则继续,否则打印出错信息6.4 创建一个子线程,是则继续,否则打印出错信息6.5 接收客户端传输的命令6.6 解析命令6.7 重复 6.26.6 过程部分测试命令(取决于你放文件的位置,仅供参考):put /home/ubu ntu/L in ux_Ser_Cli/Clie nt/text/a.txt /home/ubu ntu/L in ux_Ser_CIi/Server/text put/h

10、ome/ubu ntu/L inu x_Ser_Cli/Clie nt/text/user.txt /home/ub un tu/Li nu x_Ser_Cli/Server/text get/home/ubuntu/Linux Ser Cli/Server/text/b.txt /home/ubuntu/Linux Ser Cli/Client/text源文件:客户端:/Clie nt commo n.h#pragma once#i nelude #i nelude #in elude comma nd.hH/Clie nt comma nd.h #pragma once #i nelude

11、ncommo n.h1 #i nclude #defi ne MAX.LINE 1024器端发送命令的最大长度#defi ne COMMAND_LINE 256入客户端命令的最大长度#defi ne MAX.LENGTH 64数或命令的最大长度# nelude #i nelude # nelude #in elude #in elude ;-int do_c onn ect(char *ipzint *sock_fd);器端进行连接/向服务#i nelude # nclude verrno .h/端口号用户输#defi ne MAX.ARG 4 struct comma ndine _char

12、 *n ame;/char *argvMAX_ARG; /int do_get(c onst char *src, const char *dst, int sock_fd);/端服务器下载文件一/与服务从远向远进入当列出当:一儿端服务器上传文件进入远列出当退出int do_cd(char *path);前主机指定目录/服拆分获int do_ls(char *path);前主机指定目录下的内容/int do_serv_cd(char *pathzint sock_fd);端服务器指定目录/int do_servs(char *pathzint sock_fd);前服务器目录信息/int spl

13、it(struct comma nd_| ine *com, char lin e);命令相关函数一/char * path_alloc(size_t *sizep);存放完整路径的内存空间起始地址和大J/int in put();struct comma nd I ine comd:/每个参#defi ne PORT8000命令的名称命令携带的参数int argv;输入的参数个数/Clie nt comma nd.c#i ncludeHcommon .hint do_co nn ect(char *ipzi nt *sock_fd) /与服务器端进行连接in t res;sockle n_t

14、 len;char buflOO =,M;struct sockaddrj n svraddGcliaddr;bzero(&cliaddr/sizeof(cliaddr);把一段内存区的内容全咅8设置为0*sock_fd = socket ( PFJNET, SOCK.STREAO);svraddr. sin_family = AFJNET;svraddr. sin_port= htons (1234);inet_pton (AFJNETJp , &(svraddr. sin_addr);res = connect (*sock_fdz(structsockaddr *)(&svraddr),

15、sizeof(svraddr);read (*sock_fd/buf/sizeof(buf);printf CsXnbuf);/prin廿(Co nnet ServerScuess!n)return res;int do_cd(char *path) /进入当前主机指定目录char *ptr; /记录改变后的文件目录size_t size;if( chdir (path) d_ name);_closedir(dp);return 0;int do_put(c onst char *src, const char *dst, i nt sock_fd) /向远端服务器上传文件-FILE *fp

16、;char b_tMAX_LENGTH;/ 记录argvl的临时变量char bufferMAX_LINE;char file_nameMAX_LENGTH;int file_block_le ngth = 0;/文件int i = O.J = OJe n = 0;int res = 0;if(sock_fd = 0)printf (Create Socket Sucess!n);elseperror (Failed!n);exit (1);列出当前主机指定目录下的内容write (sock_fctcomd.nam巳sizGof(comd.name); 向月艮务器发送操作符printf (Mc

17、omd .n amesXncomd. name); bzero(buffer,sizeof(buffer);strcpy (buffer,src);send (sock_fd,buffGr;sizGof(buffGrj,O);/sen d(sock_fdzsrc,sizeof(src),O);printf (”src:%sn:buffer);bzero(buffer,sizeof(buffer);strcpy (buffer,dst);send (sock_fd/buffer,sizeof(buffer),O);printf (”dst:%sn:buffer);recv (sock.fdbuf

18、feGsizeofCbufferJO); printf CbuffersXnbuffer);if( strcmp (buffer/Ready) = 0)bzero(buffer,sizeof(buffer);strcpy (b_tzsrc);len = strle n (b_t);i = len1;while(b_ti != /)/* 提取文件名 */i-;i+;while(i 0)/Ready/OKprintf (nfile_blockngth=%dn,/file_block_le ngth);file_ name);res = send (sock_fd/buffer/file_block

19、Jength + 1,0);if(res0)printf (Se nd File:t%s Failedn,break; bzero(buffer, sizeof(buffer);厂这段代码是循环读取文件的一段数据,在循环调用send ,端,这里强调一点的TCP每次接受最多是1024字节多了就会分片,因此每次发送时尽量不要超过1024字节。*/fclose (fp);printf (File:t%s Tran sfer Fin ishedn;file_ name);_elseprintf (NOT Ready!nH); return0;int do_get(c onst char *src, c

20、onst char *dstzi nt sock_fd) /从远端服务器下载文件int len gth = 0;int writee ngth;/char file_nameMAX_LENGTH;char bufferMAX_LINE;char b_tMAX_LENGTH;FILE * fp;int i = OJe n = Oj二0;if( sock_fd 0)-prints (Create Socket Failed!n);exit (1);写入文件长度/ 记录argvlelseprintf (HCreat Socket Scuess!nH);write (sock_fdcomdnam巳si

21、zGof(comd.namG);/发送操作符printf (ncomd .n amG:%sn,/comd. name); bzero(buffer,sizeof(buffer); strcpy(buffer,src);send (sock_fcLbuffer;sizeof(bufferLO); printf (src:%snzbuffer);bzero(buffer,sizeof(buffer);strcpy (buffer,dst);send (sock-fduffecsizeoffbuffer);printf C*dst:%snbuffer);bzero(buffer,sizeof(buf

22、fer);recv (sock-fduffeGsizeobuffer);/Readyprintf (“From ServersXnbuffer);if( strcmp (buffer/Ready) = 0) bzero(buffer,sizeof(buffer);bzero(file_ name, sizeof(file_ name);strcpy (b_t,src);len = strlen (b_t);/* 提取文件名 */i = len1;while(b_ti != 7)i+;while(i 0)/循环接收,再写到文件printf (Mle ngth:%dn:le ngth);write

23、Gngth =fwrite (buffeGsizeocharJJe ngth-lzfp);if(writeGngth = len gth)_if(write_le ngth MAX_LINE) break; bzero(buffer,sizeof(buffer);if(le ngth 0)printf (HRecieve Data From Server %s Failed!n;src); exit (1); printf (HRecieve File:t %s From Server%sFin ishednfile_ name, src);fclose (fp);elseprin 廿(11N

24、OT Ready!nH);return 0;int do_serv_cd(char *pathzint sock_fd)/远端服务器指定目录char bufMAX_LINE =,M;write (sock_fd,comd.nam 巳 sizeof(comd.namG);/操作符-strcpy (buf,path); printf (se nd to SGrvGr:%sn;buf);send (sock_fcLbusizGof(buf)Q);bzero(buf,sizeof(buf);recv (sock_fctbutsizGof(buf)Q);printf (recv from server:

25、%snbuf); return 0;int do_serv_ls(char *pathzint sock_fd)/当前服务器目录信息-char bufMAX_LINE =,ln;列出进入首先发送write (sock-fdomd.nameizeocomd.name); /操作符 一strcpy(buf,path);printf (nse nd to server:%snn,buf);send (sock_fcLbusizeof(bufXO);bzero(buf,sizeof(buf);while(l)bzero(buf,sizeof(buf);recv (sock_fdzbufzsizeof(

26、buf),0);if( strcmp (buf/Finish) = 0)break;printf (”sn;buf);首先发送return 0;int bye(i nt sock_fd)务器,关闭连接char buf5 =,M;write (sock_fd,BYE;4);recv (sock_fd,buf,sizGof(buf),0); /prin tf(H%sn;buf);close(sock_fd);printf (Close lin ks!n);return 0;/退出服/Clie nt in put.c#i nelude commonh intin put(i nt *le n)cha

27、r Comma ndCOMMAND_LINE =,H;/int argv;printf (Please En ter Comma nd And Path!n); gets (Command); *le n =strle n (Comma nd);讦(strcmp (Commandbye) = 0)len = -1;memset(&comdQ sizeof(comd); argv = split(dcomctComma nd); return argv;int split(struct comma ndj ine *comzchar lin e) /拆分命令相关函数_char ca_tmpCOM

28、MAND_LINE =,M;int i = 0;intj = 0;int k = 0;int flag = 1;int len 二 strle n (li ne);for(i = 0;i argvi = (char *) malloc (sizeof(char)*64);for(i = 0;i argvk = (char *)malloc(sizeof(char);strcpy (com-argvkzca_tmp);/prin tf(com-a:%sn;comargvk);flag = 1; j = 0; mGmsGt(ca_tmpOsizGof(ca_tmp); k+;com-name=(c

29、har *) malloc (sizeof(char)*64); strcpy (com-nam 巳 comargvO); return k;/Clie nt Own_Fu nctio n.c#in elude comma nd.h#ifdef PATH_MAXstatic long pathmax = PATH_MAX;#elsestatic long pathmax = 0;#en chfstatic long posix_versi on = 0;static long xsi_versi on = 0;/*If PATH_MAX is in determ in atezno guara

30、 ntee this is adequate*/ #defi nePATH_MAX_GUESS 1024char *path_alloc(size_t *sizep)int arg = 0;int len = 0;int sock_fd;in t res;char ip100 =,M;char *ptr;size_t size;讦(posix_versi on = 0)posix_version = sysco nf(_SC_VERSION);讦(xsi_versi on = 0) xsi_version二 sysco nf(_SC_XOPEN_VERSION);讦(pathmax = 0)e

31、rrno = 0;if(pathmax = pathco nf(7,_PC_PATH_MAX) 0)讦(errno = 0) pathmax = PATH_MAX_GUESS; else printf(Hpathco nf error for _PC_PATH_MAXM);elsepathmax+;if(posix_version 200112L) & (xsi_version 4) size =pathmax + 1;elsesize = pathmax;if(ptr = malloc (size) = NULL)printf (Hmalloc error for path name11);

32、if(sizep != NULL) *sizep = size;return(ptr);/Clie nt main .c#i ncludencommo n.huint main ()printf (Please en ter IPv4 !n);gets (ip);res = do_c onn ect(ip , &sock_fd);讦(res != 0)perror (Connect Server Failed!n);/exit(l);while(l)prin 廿(P lease en ter the comma nd to be operat in g.rT);loop:arg = in pu

33、t(&le n);if(le n = = 0)perror (The in put is empty,Will be exit!rT);sleep(2);goto loop;else if(le n = = -1)perror (You in put byethe programme wil be exit!n); sleep(l); bye(sock_fd);exit (1);if (arg = 2)if( strcmp (comd.name/,cdM) = 0)do_cd(comd.argvl);else 讦(strcmp (comd.name/,ls,) = 0) dos(comd.ar

34、gvl);_else 讦(strcmp (comd.name/,!cd,) = 0)strcpy (comd.name/,CDM); do_serv_cd(comd.argvl,sock_fd);-else 讦(strcmp (comd.name/,!ls,) = 0)strcpy (comd.name/,LS,); do_serv_ls(comdargvlLsock_fd);-else if(arg = 3)if( strcmp (comd.name/,getM) = 0)strcpy (comd.nam 巳“GET”);do_get(comd.argvl/comdeargv2/sock_f

35、d); else 讦(strcmp (comd.namG/put”)= 0) strcpy (comd.name/,PUTn);/prin tf(%d,%d,%dnM,sizeof(*(comd. name),sizeof(*(comd.argv l),sizeof(*(comd.argv2);/ prin tf(%sn%sn;comdargvl,comd.argv2);do_put(comd.argvl,comd.argv2/sock_fd);-else printf (Too many parameters or Too few parameters!n1); goto loop;else

36、printf (Too many parameters or Too fewparameters!1n”);goto loop;return 0;/Clie nt Makefile:mai n: mai n.o comma nd.o Own_Fun ctio n.o in put.ogcc -o main mai n.o comma nd.o Own_Fun ctio n.o in put.o mia n. o:mai n.c gcc -c mai n.ccomma nd.o:comma nd.cgcc -c comma nd.cOwn_Fun ctio n. o:Ow n_Fun ctio

37、n.c gcc -c Own_Function.c in put.o:i nputcgcc -c in putc.PHONY:clea n clea n:rm -rf *.o mai n服务器端:/Server com monh #i nclude #i nclude #i nelude #i nclude #i nclude #in elude #in elude #i nelude #i nelude #in elude 入客户端命令的最大长度#defi ne MAX_LENGTH 64数或命令的最大长度int do_c onn ect(char *ip,i nt *serv,i nt *

38、sock_fd);/与月艮int do get(const char *srczconst char *dstzint sock fd);/端服务器下载文件从远int do put(const char *src, const char *dst, int sock fd);/端服务器上传文件#defi ne MAX_LINE 1024/器端发送命令的最大长度#defi ne PORT8000/#defi ne COMMAND_LINE 256/向服务端口号用户输/向远int do_cd(char *path,i nt sock_fd);/进入当刖主机指定目录int do_ls(char *p

39、ath,i nt sock_fd);当前主机指定目录下的内谷/列出char * path_alloc(size_t *sizep);存放完整路径的内存牢间紀始地土1卜和大/1 intsock_fd;3犬取/Clie nt comma nd.c#i ncludeHcommon .h”if(res != 0)perror (Err in bindn);exit (1);liste n (*serv, 5);len=sizeof(structsockaddrj n );*sock_fd= accept (*serv,(struct sockaddr *)(&cliaddr),&len); send

40、(*sock_fd/YES/Co nn ect Sucess!,/20/0);return 0;int do_cd(char *pathzint sock_fd) /size_t size;if( chdir (path) d_name);send (sockfctbutsizeoHbufXO);printf (%sn;dirp-d_ name);se nd (sock.fd/Fi nish;7,0);prin 廿(”Fi ni shnH);closedir(dp);return 0;int do_put(c onst char *srczconst char *dstzi nt sock_f

41、d) /向客户端传送文件FILE * fp;char b_tMAX_LENGTH;/ 记录argv的临时变量char bufferMAX_LINE;char file_nameMAX_LENGTH;int file_block_le ngth = 0;/文彳牛int i = 0j = OJe n二0;if(sock_fd = 0)printf (Create Socket Sucess!n);elseperror (HFailed!nn);exit (1);send (sockfd, Ready,7,0);/Ready_ bzero(buffer,sizeof(buffer);recv (so

42、ck_fctfilG_nam巳sizGof(file_namG),0);接收客户端的文件名printf (Recv Clie nt File Name:%snfile_name);fp = fopen (src/r);if( NULL= fp)printf (File:t%s Not Fou ndn, file_name);elsebzero(buffer, sizeof(buffer);while( (file_blockJe ngth =fread (buffer/sizeof(char)/MAX_LINE,fp)0)_printf (file_blockngth=%dn/file_blo

43、ck_le ngth);if( send (sock_fd/buffer/file_block_length+l/0)0)prin廿(SGnd File:t%s Failedn;file_ name);break; bzero(buffer, sizeof(buffer);严这段代码是循环读取文件的一段数据,在循环调用send,发送到客户端,这里强调一点的TCP每次接受最多是1024字节多了就会分片,因此每次发送时尽量不要超过1024字节。或者选择4096效率比较高*/fclose (fp);printf (File:t%s Tran sfer Fin ishedn,file_ name);r

44、eturn 0;int do_get(c onst char *src, const char *dstzi nt sock_fd) /从客户端接收文件一int len gth = 0;int writeje ngth;/写入文件长度char file_nameMAX_LENGTH;char bufferMAX_LINE =,H;char b_tMAX_LENGTH;/ 记录argv的临时变FILE * fp;int i = OJe n 二 Oj 二 0;int len_l 二 0;if( sock_fd 0)-printf (le ngth:%dnzle ngth); write_le ng

45、th =fwrite (bufferrsizeof(char)Je ngth-lzfp);printf (”dn:writG_le ngth);讦(write_le ngth = (le ngth-1) -if(write_le ngth MAX_LINE) break; bzero(buffer,sizeof(buffer);if(le ngth 0)static long xsi_versi on = 0;I*If PATH_MAX is in determ in ate ,no guara ntee this is adequate*/ #defi ne PATH_MAX_GUESS 1

46、024 char*path_alloc(size_t *sizep)char *ptr;size_t size;if(posix_versi on = 0)posix_version = sysco nf(_SC_VERSION);if(xsi_versi on = 0)xsi_version 二 sysco nf(_SC_XOPEN_VERSION); if(pathmax = 0)errno = 0;if(pathmax = pathco nf(7_PC_PATH_MAX) 0)讦(errno = 0)pathmax = PATH_MAX_GUESS;elseprintf (pathco

47、nf error for _PC_PATH_MAXM);-else pathmax+;if(posix_version 200112L) & (xsi_version 4)size = pathmax + 1;elsesize = pathmax;if(ptr = malloc (size) = NULL)printf (Hmalloc error for path nameM);if(sizep != NULL)*sizep = size;return(ptr);/Server mai n.c#i ncludeMcommo n.hint main ()int serv = -1; int s

48、ock_fd = -1;char ip20二”;char buf1024 =,Mchar src1024 =,M;char dst1024 =,M;/ do_co nn ect(ipz&servz&sock_fd);while(l)if(sock_fd 0)-do_co nn ect(ip , &servz&sock_fd);read (sock_fd,buf,sizeof(buf);/prin tf(“buf:%sn;buf);if( strcmp (buf/CD) =0)bzero(buf,sizeof(buf);recv (sock_fd,buf,sizGof(buf),0); do_c

49、d(buf/sock_fd); bzGro(buf,sizGof(buf);else if( strcmp (buf/LS) = 0)bzero(buf/sizeof(buf);recv (sock_fd,buf,sizeof(buf0); do_ls(buf/sock_fd);bzero(buf,sizeof(buf);else if( strcmp (buf/GET) = 0) bzero(buf7sizeof(buf);recv (sock_fd,src,sizeof(src),0);recv (sock_fd,dstsizeof(dst)Q); printf (src:%sndst:%

50、sn:src,dst); do_put(src,dst/sock_fd);bzGro(buf,sizGof(buf);else if( strcmp (buf/PUT) = 0)if(sock_fd 0)_printf (ERRnH);recv (sock_fd,src,sizeof(src),0);recv (sock_fd,dst,sizGof(dst),0); printf (src:%sndst:%snMfsrc,dst); do_get(srczdst/sock_fd);bzero(butsizGof(buf);else if( strcmp (buf/BYE) =O)/prin t

51、f(”by);send (sock_fcL”OK30); sleep(60); sock_fd = -1;printf (%dn;sock_fd); close(sock_fd); _ elsereturn 0;/server makefilemain:mai n.o comma nd.o Own_Fun ctio n.ogcc -o mai n mai n.o comma nd.o Own_Fun ctio n.o mia n. o:mai n.c gcc -c mai n.ccomma nd.o:comma nd.cgcc -c comma nd.cOwn_Fun ctio n. o:Ow n_Fun ctio n.cgcc -c Own_Function.c.PHONY:clea nclea n:rm -rf *.o mai n

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!