为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

如何基于c语言tftp服务器与客户端实现_华清远见

2021-02-28 7页 doc 96KB 32阅读

用户头像 个人认证

sxymh

从事多年建筑工程施工安全、工程技术、设计方案积累了丰富经验

举报
如何基于c语言tftp服务器与客户端实现_华清远见......如何基于c语言tftp服务器与客户端实现本篇文章主要的容就是教大家,如何基于c语言tftp服务器与客户端实现,是非常精彩的容,希望对大家的学习之路有所帮助。TFTP(TrivialFileTransferProtocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。开发环境:ubuntu所用知识点:c,socket,tcp/ip协议A)本实验主要实现tftp协议的服务器与客户端。服务器实现功能有:1)接收处理客户端请...
如何基于c语言tftp服务器与客户端实现_华清远见
......如何基于c语言tftp服务器与客户端实现本篇文章主要的容就是教大家,如何基于c语言tftp服务器与客户端实现,是非常精彩的容,希望对大家的学习之路有所帮助。TFTP(TrivialFileTransferProtocol,简单文件传输)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。开发环境:ubuntu所用知识点:c,socket,tcp/ip协议A)本实验主要实现tftp协议的服务器与客户端。服务器实现功能有:1)接收处理客户端请求,上传下下载文件2)进行用户验证3)对传输数据进行加密解密处理4)生成日志文件客户端实现功能有:1)向服务器发出请求,上传或下载文件2)对传输数据加密解密3)对用户信息进行MD5加密B)相关代码实现:宏定下:#ifndefMAKEWORD#defineMAKEWORD(l,h)((unsignedshort)(((unsignedchar)(l))|(((unsignedshort)(unsignedchar)(h))<<8)))#endif#defineWSA_MAJOR_VERSION1#defineWSA_MINOR_VERSION1#defineWSA_VERSIONMAKEWORD(WSA_MAJOR_VERSION,WSA_MINOR_VERSION)#defineTFTP_OCTET1#defineTFTP_WSTAT_FIRSTACK0#defineTFTP_WSTAT_NEXTACK1#defineTFTP_WSTAT_LASTACK2#defineTFTP_RRQ1//读请求#defineTFTP_WRQ2//写请求#defineTFTP_DATA3//数据#defineTFTP_ACK4//ACK#defineTFTP_ERROR5//Error#defineMAX_RETRY3//最大重复次数#defineTFTP_NOTEND_DATALEN512+2+2//数据块长度//错误种类#defineNot_defined0#defineFile_not_found1#defineAccess_violation2#defineDisk_full3#defineIllegal_TFTP_operation4#defineUnknown_port5#defineFile_already_exists6#defineNo_such_user7#defineTime_out8#defineRead_file_Error9#defineCannot_create_file10#definepasswd_or_user_error11包的填充:#include"define.h"#include#includeintmakeack(unsignedshortnum,char*buffer,intsize);intmakedata(unsignedshortnum,char*data,intdatasize,char*buffer,intbufsize);intmakeerr(unsignedshortnum,char*buffer);//ACK包填充intmakeack(unsignedshortnum,char*buffer,intsize){intpos=0;buffer[pos]=0;pos++;buffer[pos]=TFTP_ACK;//操作码为04pos++;buffer[pos]=(char)(num>>8);//块号2个字节pos++;buffer[pos]=(char)num;pos++;returnpos;}//Data包填充intmakedata(unsignedshortnum,char*data,intdatasize,char*buffer,intbufsize){intpos=0;buffer[pos]=0;pos++;buffer[pos]=TFTP_DATA;//操作码为03pos++;buffer[pos]=(char)(num>>8);//块号pos++;buffer[pos]=(char)num;pos++;memcpy(&buffer[pos],data,datasize);//填充数据pos=pos+datasize;returnpos;}//ERROR包填充intmakeerr(unsignedshortnum,char*buffer){intpos=0;buffer[pos]=0;pos++;buffer[pos]=TFTP_ERROR;//操作码为05pos++;buffer[pos]=(char)(num>>8);//错误种类号pos++;buffer[pos]=(char)num;pos++;returnpos;}日志log.c实现#includestaticcharlog[100];//日志chardatetime[20];//记录时间变量inttimeout=2,retran=3;//服务器参数voidrecord(inta,structsockaddr_in*sin,char*file){chartem[60];time_tt=time(0);//初始化日历时间strftime(datetime,sizeof(datetime),"%y/%m/%d%X",localtime(&t));//将时间格式化strcat(log,datetime);//将时间写入记录//将字符串格式化bzero(&tem,sizeof(tem));if(a==1)sprintf(tem,"收到来自%s上传文件%s的请求。\n",inet_ntoa(sin->sin_addr),file);if(a==2)sprintf(tem,"%s上传文件%s完毕。\n",inet_ntoa(sin->sin_addr),file);if(a==3)sprintf(tem,"收到来自%s下载文件%s的请求。\n",inet_ntoa(sin->sin_addr),file);if(a==4)sprintf(tem,"%s下载文件%s完毕。\n",inet_ntoa(sin->sin_addr),file);if(a==5)sprintf(tem,"出现出错,操作中断。\n",inet_ntoa(sin->sin_addr),file);//将具体信息写入记录strcat(log,tem);FILE*write;if((write=fopen("log.txt","a+"))==NULL)printf("打开记录文件失败\n");//将记录写入文件fwrite(&log,strlen(log),1,write);fclose(write);bzero(&log,sizeof(log));}加密解密实现#include#include#includeintdecrypt(FILE*in,FILE*out);intencrypt(FILE*in,FILE*out);unsignedcharatoh(char*hexstr);intencrypt(FILE*in,FILE*out){if(in==NULL||out==NULL){fprintf(stderr,"%s\n","fileerror!\n");return-1;}unsignedcharhex;while(fread(&hex,1,1,in)){hex=~hex^0x98;fprintf(out,"%02X",hex);}return0;}intdecrypt(FILE*in,FILE*out){if(in==NULL||out==NULL){fprintf(stderr,"%s\n","fileerror!");return-1;}unsignedcharhexstr[3];unsignedcharhex=0;inti=0;while(fread(hexstr,2,1,in)){hex=atoh(hexstr);hex=~(hex^0x98);fwrite(&hex,1,1,out);}return0;}/*convertstringtohex*/unsignedcharatoh(char*hexstr){inti;inthextodec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};charchtodec[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};unsignedcharhexnum=0;for(i=0;i65535)blocknum=0;//最后一包if(ret工程
管理器,可通过make完成编译。D)实现效果:以上容就是教大家如何基于c语言tftp服务器与客户端实现,是否获益匪浅呢?更多容可以在华见官网查询,华见提供免费的资料供大家参考和学习。...专业..
/
本文档为【如何基于c语言tftp服务器与客户端实现_华清远见】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索