客户端下载

2023-11-02

#include <head.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>


#define PORT 69
#define IP "192.168.2.11"
#define NAME "5.png"

int main()
{
	printf("<===========客户端下载===========>\n");
	//创建报文套接字
	int sfd = socket(AF_INET,SOCK_DGRAM,0);
	if(sfd < 0)
	{
		perror("socket--> ");
		return -1;
	}
	
	//填充地址消息结构体,真实地址消息结构体根据地址族制定
	struct sockaddr_in sin;//定义结构体(给结构体内的每个元素赋值)
	sin.sin_family      = AF_INET;//网络协议-IPV4
	sin.sin_port        = htons(PORT);//端口号1024-69151
	sin.sin_addr.s_addr = inet_addr(IP);//uabntu的本机ip地址
	socklen_t addrlen = sizeof(sin);

	//下载数据包赋值
	char buf[516] = "";
	char *p = buf;

	unsigned short *p1 = (unsigned short*)buf;//操作码2byte;
	*p1 = htons(1);

	char *p2 = (char *)p1+1;//NAME Xbyte;
	strcpy(p2,NAME);

	char *p3 = (char*)(p1+strlen(p2));
	*p3 = 0;

	char *p4 = (char*)(p1+strlen(p2)+1);//模式 nbyte;
	strcpy(p4,"octet");
	
	size_t sizeall = 2+strlen(p2)+1+strlen(p4)+1;//总字节大小 

	//创建图片文件用于接收
	int fdw = open("./5.png",O_WRONLY|O_CREAT|O_TRUNC,0777);
	if(fdw < 0)
	{
		perror("open---> ");
		return -1;
	}
	//发送请求
	int res2 = sendto(sfd,buf,sizeall,0,(struct sockaddr*)&sin,addrlen);
	if(res2 < 0)
	{
		perror("sendto--> ");
		return -1;
	}
	printf("sendto success\n");



	ssize_t res = 0;
	ssize_t res1 = 0;
	int k = 1;
	char *pw = p+4;//读取数据的地址(操作码2byte+块编号2byte)
	while(k)
	{
		//接收(发送者)服务器的消息
		bzero(buf,sizeof(buf));
		res = recvfrom(sfd,buf,516,0,(struct sockaddr*)&sin,&addrlen);
		if(res < 0)
		{
			perror("recvfrom--> ");
			return -1;
		}
		printf("recvfrom -- success res-->%ld\n",res);

		write(fdw,pw,res-4);//写入数据
		*(p+1) = htons(4);//ACK操作码赋值为4



		//发送消息给服务器
		res1 = sendto(sfd,buf,4,0,(struct sockaddr*)&sin,addrlen);//4 <==> ACK操作码
		if(res1 < 0)
		{
			perror("sendto--> ");
			return -1;
		}
		printf("sendto ACK success res1-->%ld\n",res1);

		if(res < 516)
		{
			break;
		}

	}


	//关闭套接字
	
	close(sfd);
	close(fdw);

	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

客户端下载 的相关文章

  • 段错误...关于你好世界

    这段代码非常简单 但我在 x86 64 Linux 系统上遇到了段错误 这让我很烦恼 刚开始接触asm 请耐心等待 与 NASM 组装nasm f elf64 test asm 与连接ld o test test o SECTION tex
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何通过 makefile 在 Linux 上安装程序? [复制]

    这个问题在这里已经有答案了 可能的重复 Linux Unix make install 应该包含什么 https stackoverflow com questions 528399 what should linux unix make
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下

随机推荐

  • 【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路+代码(持续更新)

    第十一届泰迪杯数据挖掘挑战赛 A 题 新冠疫情防控数据的分析 思路 代码 持续更新 问题背景 解决问题 代码下载 数据分析 Task1 Task2 Task3 Task4 问题背景 自 2019 年底至今 全国各地陆续出现不同程度的新冠病毒
  • 控制反转及Bean装配的几种方式

    控制反转及Bean装配的几种方式 Spring两大基础核心 一是控制反转 二是依赖注入 控制反转和依赖注入 控制反转 通俗来讲 就是将bean的创建和销毁交由另一个东西全权管理 这个东西叫做Spring容器 一般来说 在Spring应用中
  • 华为服务器提示错误信息,服务器错误日志

    服务器错误日志 内容精选 换一换 为加强对数据的容灾管理 云堡垒机支持手动备份和配置日志远程备份 提高审计数据安全性和系统可扩展性 通过手动导出 下载各功能模块数据文件保存在本地 可手动备份日志请参见表1 系统内导出的csv文件 用Exce
  • element el-date-picker选择时间范围限制

    element el date picker选择时间范围限制
  • 生物识别技术在场景应用中发挥重大作用

    相较于条码支付 刷脸支付的硬件成本还是比较高 而且占空间 因此 其应用场景没有条码支付丰富 微信扫脸支付 在商超 餐饮以及便利店等场景中 收银空间是有限的 布放哪怕像PAD大小的刷脸支付设备都会觉得局促 如果同时布放两个哪怕像PAD大小的设
  • Odoo 进销存报表现已开源

    根据会计区间或自定义查询时间段 对仓库的产品出入库情况进行查看 模块地址参见内部群公告
  • 谷粒商城微服务分布式高级篇ElasticSearch四——Java使用ElasticSearch

    文章目录 ElasticSearch Rest Client Java使用ElasticSearch 存储数据到ES 从ES检索数据 项目使用ES ElasticSearch Rest Client Java使用ElasticSearch
  • 迷你世界箱子里物品无限取

    废话少说代码如下 在高度为8的箱子可以无限补给 function f e WorldContainer addItemToContainer e x e y e z e itemid e itemnum end 关闭盒子 函数 f 下面是添
  • TypeScript项目配置

    前言 我们需要建立tsconfig json 作用 用于标识 TypeScript 项目的根路径 用于配置 TypeScript 编译器 用于指定编译的文件 重要字段 files 设置要编译的文件的名称 include 设置需要进行编译的文
  • offsetTop、offsetParent、scrollTop以及vue如何实现左右联动效果

    offsetTop 元素到offsetParent顶部的距离 offsetParent 距离元素最近的一个具有定位的祖宗元素 relative absolute fixed 若祖宗都不符合条件 offsetParent为body 如下图所示
  • OrangePi 4b Lts GPIO最高输出频率测试

    根据示波器显示的值 在写入高低电平各有一个usleep 1 时可以输出稳定10kHz的方波 但是10k每段有50us 不知道usleep 1 为什么会变成50us 可能是digitalWrite稳定时间比较长 直接死循环里digitalWr
  • 学生管理系统主要界面

    目录 1 登录界面 login 2 信息管理界面 main 3 页面展示 本篇文章主要介绍学生管理系统主要界面 至于各界面中所含代码均基于Servlet 创建 使用 生命周期 http协议 http请求 http响应 过滤器 Ajax 异步
  • gtest编译和使用

    最近想总结一下gtest的使用 方便后面查阅 1 编译安装googletest 2 编写测试用例 3 编译测试和调试代码 1 编译安装googletest github上下载googletest release 1 10 0 这里需要注意该
  • 关于STM32按键实验中连接按键的GPIO管脚是配置为上拉输入还是下拉输入的理解

    关于STM32按键实验中连接按键的GPIO管脚是配置为上拉输入还是下拉输入的理解 以正点原子按键输入实验为例 1 按键KEY0 lt gt PE4 按键另一端接GND 2 按键KEY1 lt gt PE3 按键另一端接GND 3 按键WK
  • 【力扣】最接近的三数之和

    给你一个长度为 n 的整数数组 nums 和 一个目标值 target 请你从 nums 中选出三个整数 使它们的和与 target 最接近 返回这三个数的和 假定每组输入只存在恰好一个解 示例 1 输入 nums 1 2 1 4 targ
  • 生命的进程

    比我们活着时间长的人自然能呼吸到更多的空气 也必将有我们所不了解的生活阅历和技能 尊重他人 就是成就自己
  • VulnHub-Sick0s1.2

    目录 简介 信息收集 漏洞发现 漏洞利用 权限提升 总结 简介 该靶机是Sick0s系列的第二个靶机 总体来说不难 提权那里需要花点时间 毕竟linpeas脚本没有将计划任务标红 总之我个人尝试了很久内核提权 浪费了大量时间 而且不知道是w
  • C++函数参数的默认值

    一 函数参数的默认值 1 函数参数的默认值就是说在声明函数或者定义函数的时候直接在参数后给赋值 这样在函数调用的时候调用方可以不用再给传值 它会默认使用它的默认值 错误实例 在给函数参数赋默认值的时候要注意以下几点 1 参数默认值必须从右向
  • GET--POST的同步/异步请求

    同步请求的过程不能进行其他操作 而异步请求相当于开了一个支路 可以进行其他操作 但是请求的结果得返回到主线程 GET同步请求 NSString strURL http api map baidu com place v2 search qu
  • 客户端下载

    include