tftpd32下载(tftpd32下载文件_tftp无法下载大文件)

发布时间:2025-12-10 19:56:59 浏览次数:1

tftpd32下载文件_tftp无法下载大文件-tftpd32下载文件到本地

tftpd32下载文件_tftp无法下载大文件tftp下载模型

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

代码:

#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__",__LINE__);\perror(msg);\}while(0)#define CER_PORT 69#define CER_IP "192.168.8.191"int main(int argc, const char *argv[]){if(argc<2){printf("请输入要下载的文件\n");return -1;}//创建套接字int sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){ERR_MSG("socket");return -1;}//绑定IP及端口信息struct sockaddr_in server;server.sin_family=SOCK_DGRAM;server.sin_port=htons(CER_PORT);server.sin_addr.s_addr=inet_addr(CER_IP);char buf[600]="";char str[600]="";struct sockaddr_in client;socklen_t len=sizeof(client);bzero(buf,sizeof(buf));short *p1=(short*)buf;*p1=htons(1);char *p2=buf+2;strcpy(p2,argv[1]);char *p3=p2+strlen(argv[1]);*p3=0;char *p4=p3+1;strcpy(p4,"octet");char *p5=p4+strlen("octet");*p5=0;int size=4+strlen(p2)+strlen(p4);if(sendto(sockfd,buf,size,0,(struct sockaddr*)&server,sizeof(server))<0){ERR_MSG("sendto");return -1;}FILE *fd=fopen(argv[1],"w+");if(NULL==fd){ERR_MSG("fopen");return -1;}ssize_t res;//定义变量接收接收到的字节数printf("准备下载\n");while(1){bzero(buf,sizeof(buf));res=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&client,&len);if(res<0){ERR_MSG("recvfrom");return -1;}else if(0==res){printf("客户端断开\n");break;}*p1=ntohs(((short*)buf)[0]);if(5==*p1){printf("%s\n",&buf[4]);continue;}*p1+=1;*p1=htons(*p1);printf("%s\n",&buf[4]);bzero(str,sizeof(str));strcpy(str,&buf[4]);//将接收的数据传输到本地文件for(int i=4;i<res;i++)fputc(buf[i],fd);if(sendto(sockfd,buf,4,0,(struct sockaddr*)&client,len)<0){ERR_MSG("sendto");return -1;}if(res<516){printf("文件下载完毕\n");break;}}fclose(fd);close(sockfd);return 0;}

是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活CLion DataGrip DataSpell dotCover dotMemory dotTrace GoLand PhpStorm PyCharm ReSharper ReShaC++ Rider RubyMine WebStorm 全家桶 刷新

【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477