当前位置: 首页 > news >正文

青岛网站建设咨询注册建设通网站首页

青岛网站建设咨询,注册建设通网站首页,国家注册商标官方网,百度地图收录提交入口1)tftp协议概述 简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输 特点: 是应用层协议 基于UDP协议实现 数据传输模式 octet:二进制模式(常用) mail:已经不再…

1)tftp协议概述

简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输

特点:

是应用层协议

基于UDP协议实现

数据传输模式

octet:二进制模式(常用)

mail:已经不再支持

2)tftp下载模型

TFTP通信过程总结

  1. 服务器在69号端口等待客户端的请求
  2. 服务器若批准此请求,则使用 临时端口 与客户端进行通信。
  3. 每个数据包的编号都有变化(从1开始)
  4. 每个数据包都要得到ACK的确认,如果出现超时,则需要重新发送最后的数据包或ACK包
  5. 数据长度以512Byte传输的,小于512Byte的数据意味着数据传输结束。

 

代码实现

main.c

#include"tftp.h"int main(int argc, const char *argv[])
{int cmd  = 0;//用来标记操作char filename[20] = "";//存放文件名int cfd = socket(AF_INET,SOCK_DGRAM,0);//创建套接字文件if(cfd == -1){perror("socket error");return -1;}while(1){menu();printf("请输入要执行的操作:");scanf("%d",&cmd);switch(cmd){case 1:printf("请输入文件名:");scanf("%s",filename);download(cfd,filename);break;case 2:printf("请输入文件名:");scanf("%s",filename);upload(cfd,filename);break;case 3:printf("退出\n");goto END;break;default:printf("输入错误\n");break;}}
END://关闭文件描述符close(cfd);return 0;
}

tftp.c

#include"tftp.h"
//菜单
void menu()
{printf("-------------------------\n");printf("--------1.下载文件--------\n");printf("--------2.上传文件--------\n");printf("--------3.退出------------\n");printf("-------------------------\n");
}//上传
int upload(int cfd , char *filename)
{char buf[N] = "";short *p1 = (short*)buf;*p1 = htons(2);//设置操作码为2,表示上传char *p2 = buf + 2;//文件名的起始位置strcpy(p2,filename);char *p4 = p2 + strlen(p2) + 1;//模式的起始位置strcpy(p4,"octet");int size = 2 + strlen(p2) + strlen(p4) + 2;//计算请求包的总长度//打开本地文件int fd = open(filename,O_RDONLY);if(fd == -1){perror("open error");return -1;}//绑定服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);socklen_t len = sizeof(sin);//给服务段发送请求if(sendto(cfd,buf,size,0,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("sendto error");return -1;}	short flag = 1;//设置标示位//收发数据while(1){//清空数据bzero(buf,sizeof(buf));if(recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&len)==-1){perror("recvfrom error");return -1;}//将ack改造成为数据包if(buf[1] == 4 || flag == buf[2]){int res = read(fd,buf+4,sizeof(buf)-4);//从buf的5个开始放数据,读取buf-4个数据if(res < 0){perror("read error");return -1;}if(res == 0){printf("文件发送完毕\n");return -1;}buf[1]=3;buf[3] = flag;if(sendto(cfd,buf,res+4,0,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("sendto error");return -1;}	flag++;}if(buf[1] == 5){printf("接收错误\n");break;}}
}//下载
int download(int cfd ,char *filename)
{char buf[N] = "";short *p1 = (short*)buf;*p1 = htons(1);//设置操作码为1,表示下载char *p2 = buf + 2;//文件名的起始位置strcpy(p2,filename);char *p4 = p2 + strlen(p2) + 1;//模式的起始位置strcpy(p4,"octet");int size = 2 + strlen(p2) + strlen(p4) + 2;//计算请求包的总长度//创建本地文件int fd = open(filename,O_CREAT|O_WRONLY|O_TRUNC,0644);if(fd == -1){perror("open error");return -1;}//绑定服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);socklen_t len = sizeof(sin);//给服务段发送请求if(sendto(cfd,buf,size,0,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("sendto error");return -1;}	short flag = 1;//设置标示位while(1){//清空bzero(buf,sizeof(buf));//获取服务器发来的包int res = recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&len);if(res == -1){perror("recvfrom error");return -1;}//判断是否是数据包if(buf[1] == 3 && flag == ntohs(*(short*)(buf+2))){//将数据写入文件中if(write(fd,buf+4,N-4)==-1){perror("write error");return -1;}//返回ackbuf[1] = 4; if(sendto(cfd,buf,4,0,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("sendto error");return -1;}flag++;//确保和需要的块编号一致}//判断是否是错误包if(buf[1] == 5){printf("文件发送错误\n");}//判断是否发送完毕if(res < 516){printf("文件接收完毕\n");return -1;}}
}

tftp.h

#ifndef TFTP_H
#define TFTP_H
#define SER_PORT 69
#define SER_IP "192.168.1.4"
#define N 516
#include<myhead.h>
//菜单
void menu();//上传
int upload(int cfd , char *filename);//下载
int download(int cfd ,char *filename);#endif

效果展示

 

http://www.yayakq.cn/news/275651/

相关文章:

  • 长沙 网站开发阿里网站建设App开发
  • 深圳专业企业网站制作哪家好wordpress怎么分享到微信支付
  • 做网站用什么免费字体论坛营销
  • 柳州集团学校网站建设亚马逊书店购书官网
  • 仿网站收费字节跳动公司简介
  • 垦利网站设计重庆市公共资源交易中心官网
  • asp企业网站源码下载辽宁省住房和城乡建设厅官方网站
  • 国内设计师个人网站欣赏深圳公司网站如何设计
  • 贵州城市和城乡建设官方网站富阳网站定制开发哪家公司好
  • 网站建设与网页设计 视频教程河北网站建设哪家好
  • 山东网站建设app网站建设深圳亿联时代
  • 服务预约网站怎么建设萧山seo
  • 作文网站哪个平台好网站建设服务宗旨
  • 服装商城网站建设价格wordpress安装上传
  • 建设手机网站包括哪些费用吗青岛多区发布最新通告
  • 销售网站设计网页设计是前端还是后端
  • 网页网站建设个人简历网页模板下载
  • 蓝盾信息做网站吗廉江人做寄生虫网站
  • 咖啡厅网站开发目标做网站怎么样引流
  • 番禺网站推广html5视频标签
  • 类似百度的网站高端终端网站设计类网站
  • 国外网站建设的研究现状做ppt的网站有哪些内容吗
  • 郑州哪里有做网站的网站开发主要技术
  • 网站设置关键字初中生编程入门先学什么
  • 大学网站建设论文wordpress导出文章
  • 做啥英文网站赚钱拉新app推广
  • php 爬取网站所有链接wordpress 后台 留言
  • 广州市手机网站建设手机自助建站免费建站平台
  • 小型门户网站建设方案物流网络规划
  • 做网站赚钱全攻略网站后台管理系统开发