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

实现upt下客户端用tftp文件传输协议编写客户端发送下载文件

#include <myhead.h>
#define SEP_IP
#define SEP_PORT
int main(int argc, const char *argv[])
{//创建套接字if(int crd=socket(AF_INET,SOCK-DGRAM)==-1);{perror("socket error");return -1;}printf("创建成功\n");//填充地址struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SEP_PORT);sin.sin_addr.s_addr=inet_addr(SEP_PORT);//收发数据int flg=0;int sum=0;printf("请输入>>>下载(1)>>>发送(2)");scanf("%d",&flg);//下载if(flg==1){fp=open("8.c",O_RDWR | O_CREAT,0664);char buf[516]="";char auf[30]="";char *pa=auf;short *p=(short*)buf;*p=htons(1);char *p2=buf;p2=p2+2;strcpy(p2,"argv[1]");char *p4=p2+strlen(p2)+1;strcpy(p4,"octet");int buf_siezo=strlen(p2)+strlen(p4)+4;sendto(crd,buf,buf_siezo,0,(struct sockaddr*)&sin,sizeof(sin));bzero(buf,sizeof(buf));while(1){if(strlen(buf)<516){printf("最后一次发送");sum=1;}//读取buf中字符写入文件中read(crd,buf+4,sizeof(buf)-4);if(int res=write(fd,buf+4,512)==-1);{perror("write error");}//获取快编号char *p5=buf+2;for(int i=0;i<2;i++){*(pa+i)=*p5;p5++;}bzero(buf,sizeof(buf));//编写akfshort *p6=buf;*p6=htons(4);char *p7=buf+2;for(int j=0;j<2;j++){*p7=*(pa+j);p7++;}//发送akf包buf_siezo1=4;sendto(crd,buf,buf_siezo1,0,(struct sockaddr*)&sin,sizeof(sin));bzero(buf,sizeof(buf));if(sum==1){printf("下载完成");break;}}close(fp);}//发送if(flg=2){char cuf[516]="";char duf[30]="";char fun[30]="";char *pb=duf+2;short *pp=(short*)cuf;int k=1;int f=0;*pp=htons(2);char *p2=cuf;p2=p2+2;strcpy(p2,"argv[1]");char *p4=p2+strlen(p2)+1;strcpy(p4,"octet");int cuf_siezo=strlen(p2)+strlen(p4)+4;sendto(crd,cuf,cuf_siezo,0,(struct sockaddr*)&sin,sizeof(sin));//bzero(cuf,sizeof(cuf));//获取akffd=fopen("1.c","r+");while(1){//判断是否接接受到ack,如果未收到重新发送read(crd,fun,sizeof(fun))while(1){if(fun[3]==duf[3] && fun[4]==duf[4]){sendto(crd,cuf,sizeof(cuf),0,(struct sockaddr*)&sin,sizeof(sin));sleep(1);}break;}bzero(cuf,sizeof(cuf));bzero(duf,sizeof(duf));bzero(fun,sizeof(fun));if(f=1){break;}read(crd,duf,sizeof(duf));//提取akf,编写数据包short *p8=cuf;*p8=htons(4);char *p9=cuf+2;for(int j=0;j<2;j++){*p9=*(pb+j);p9++;}//打开文件,编写数据包int temp=read(fd,(cuf+4+512*k),512);k++;//返回值判断是否最后一次发送if(temp<512){printf("最后一次发送");f=1;}sendto(crd,cuf,516,0,(struct sockaddr*)&sin,sizeof(sin));}close(fd);}return 0;
}

http://www.lryc.cn/news/318964.html

相关文章:

  • 什么软件可以改ip地址
  • C#,文字排版的折行问题(Word-wrap problem)的算法与源代码
  • VUE+VScode+elementUI开发环境
  • 第十四届蓝桥杯省赛真题 Java A 组【原卷】
  • 可视化展示与交互编辑:探索3D Web轻量化平台HOOPS WEB Platform在BIM中的新可能性
  • Linux(centos)环境下安装Nginx的步骤文档
  • AI毕业论文降重GPTS,避免AI检测,高效完成论文
  • 什么是线程死锁?形成死锁的四个必要条件是什么?如何避免线程死锁?
  • webpack一些常用的Loader和Plugin
  • SpringCloud Bus 消息总线
  • 汽车屏类产品(五):仪表Cluster常用芯片i.MX117x
  • SQLiteC/C++接口详细介绍之sqlite3类(三)
  • Xcode调试Qt 源码
  • CVE-2019-5782:kArgumentsLengthType 设置偏小导致优化阶段可以错误的去除 CheckBound 节点
  • uni-app微信小程序上拉加载,下拉刷新
  • HTML案例-2.标签综合练习
  • C++中的多值返回:解锁函数返回值的神奇力量
  • D咖智能咖啡机:营业利器,品质与效率的完美结合
  • 江科大stm32学习笔记【6-2】——定时器定时中断定时器外部时钟
  • go优雅重试
  • Python最常用的库
  • C++面试100问(八)
  • 【Git】Github 上commit后,绿格子contribution却不显示?不知道怎么弥补?解决方法在这里
  • 【Vue3】源码解析-Runtime
  • 常见面试题之计算机网络
  • C++进阶:详解多态(多态、虚函数、抽象类以及虚函数原理详解)
  • 【Hadoop大数据技术】——MapReduce经典案例实战(倒排索引、数据去重、TopN)
  • 02、字面量与变量
  • docker的常用指令
  • 19 OpenCV 霍夫曼变换检测圆