首页 > 其他分享 >【TFTP】客户端上传文件

【TFTP】客户端上传文件

时间:2023-12-14 21:55:52浏览次数:27  
标签:recvbuf tmp addr server TFTP include 上传 tftp 客户端

 1 //// 客户端上传文件
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <unistd.h>
 5 #include <arpa/inet.h>
 6 #include <netinet/in.h>
 7 #include <sys/types.h>
 8 #include <sys/stat.h>
 9 #include <fcntl.h>
10 int main(int argc, char const *argv[])
11 {
12     // 1.创建套接字
13     int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
14     if (sockfd < 0)
15     {
16         perror("socket");
17         return -1;
18     }
19     // 2.打开待上传文件
20     int fd = open("a.txt", O_RDWR);
21     if (fd < 0)
22     {
23         perror("open");
24         return -1;
25     }
26     // 3.指定服务器地址
27     struct sockaddr_in tftp_server_addr;
28     tftp_server_addr.sin_family = AF_INET;
29     tftp_server_addr.sin_port = htons(69);
30     tftp_server_addr.sin_addr.s_addr = inet_addr("10.9.42.228");
31     // 4.组上传请求+发送请求
32     char buf[128] = "";
33     int buflen = 0, readlen = 0;
34     buflen = sprintf(buf, "%c%c%s%c%s%c", 0, 2, "a.txt", 0, "netascii", 0);
35     sendto(sockfd, buf, buflen, 0, (struct sockaddr *)&tftp_server_addr, sizeof(tftp_server_addr));
36     // 5.循环收取数据
37     char recvbuf[1024] = "";
38     struct sockaddr_in tmp_server_addr;
39     socklen_t tmp_len = sizeof(tmp_server_addr);
40     unsigned short id = 0;
41     while (1)
42     {
43         // 5.1清空地址和数据内容
44         bzero(recvbuf, sizeof(recvbuf));
45         bzero(&tmp_server_addr, tmp_len);
46         // 5.2收取数据recvfrom
47         buflen = recvfrom(sockfd, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&tmp_server_addr, &tmp_len);
48         // 5.3判断
49         if (recvbuf[5] == 5) // recvbuf=05 00
50         {
51             // 如果是差错包--打印出错信息,break
52             printf("差错信息:%s\n", recvbuf + 4);
53             break;
54         }
55         else // recvbuf=04 00
56         {
57             recvbuf[1] = 3;
58             id = ntohs(*((unsigned short *)(recvbuf + 2)));
59             id += 1;
60             *((unsigned short *)(recvbuf + 2)) = htons(id);
61             readlen = read(fd, recvbuf + 4, 512);
62             printf("即将发送%d数据包, 数据包长度%d\n", id, readlen);
63             sendto(sockfd, recvbuf, readlen + 4, 0, (struct sockaddr *)&tmp_server_addr, &tmp_len);
64             // 如果读文件内容len<512,break
65             if (readlen < 512)
66                 break;
67         }
68     }
69     // 6.关闭套接字
70     close(fd);
71     close(sockfd);
72     return 0;
73 }

 

标签:recvbuf,tmp,addr,server,TFTP,include,上传,tftp,客户端
From: https://www.cnblogs.com/mengyaoli/p/17902094.html

相关文章

  • 用JAVA实现大文件上传及显示进度信息
    一. 大文件上传基础描述:各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容。比如:Spring 框架中使用类似CommonsMultipartFile对象处理表二进制文件信息。而.NET 中使用HtmlInputFile/ Ht......
  • PHP复用CURL简单文件上传的2种方法
    方法一:curlFile客户端$filePath='head.txt';//创建CURLFile对象$file=newCURLFile($filePath);//创建cURL资源$ch=curl_init();//设置cURL选项curl_setopt($ch,CURLOPT_URL,$your_upload_url);//替换为实际的上传接口URL......
  • Vue 图片上传formdata()传参形式
    1.接口需要设置 headers:{'Content-Type':'multipart/form-data'}, from-data流的形式传参 2.jshtml://文件上传<divclass="file"><el-buttontype="primary"style="width:170px"icon="el-icon-upload......
  • linux下一键上传markdown文件到博客园
    工具链接dongfanger/pycnblog:博客园上传markdown文件(github.com)这是工具的作者,网址里也有些教程,我这里再把教程写一写,加上自己一些使用的方式。诚挚感谢工具作者的开发贡献!使用指南配置typora用Typora进行编写,需要修改图片的存储方式打开文件>偏好设置,找到'图片插入'......
  • java实现大文件上传
    文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦、缺乏交互、用户体验差。一、前端代码英国程序员RemySharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用HTML5的API,对文件上传进行渐进式增强:*iframe上传*ajax上传*进度......
  • java中大文件上传
    1、什么是秒传通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文件,想要不秒传,其实只要让MD5改变,就是对文件本身做一下修改(改名字不行),例如一个文本文件,你多加几个字,MD5就变了,就不会秒传了.2、本文......
  • Java 小文件上传、大文件分片上传、断点续传、秒传的开发原理
    1、前言 文件上传在项目开发中再常见不过了,大多项目都会涉及到图片、音频、视频、文件的上传,通常简单的一个Form表单就可以上传小文件了,但是遇到大文件时比如1GB以上,或者用户网络比较慢时,简单的文件上传就不能适用了,用户辛苦传了好几十分钟,到最后发现上传失败,这样的系统用户体......
  • Java 大文件分片上传
    原理:前端通过js读取文件,并将大文件按照指定大小拆分成多个分片,并且计算每个分片的MD5值。前端将每个分片分别上传到后端,后端在接收到文件之后验证当前分片的MD5值是否与上传的MD5一致,待所有分片上传完成之后后端将多个分片合并成一个大文件,并校验该文件的MD5值是否与上传时传入的M......
  • 【TFTP】客户端下载文件代码
    1//客户端下载文件2#include<stdio.h>3#include<string.h>4#include<unistd.h>5#include<arpa/inet.h>6#include<netinet/in.h>7#include<sys/types.h>8#include<sys/stat.h>9#include<fcntl.h>......
  • TCP简单的客户端代码(C语言)
    1#include<stdio.h>2#include<unistd.h>3#include<sys/socket.h>4#include<netinet/in.h>5#include<arpa/inet.h>6intmain(intargc,charconst*argv[])7{8//1.创建套接字(TCP)9intsockfd=socket(AF_......