1.16 day3 IO网络编程

news2025/2/25 15:41:18

用udp实现tftp下载功能

#include <myhead.h>
#define PORT 69
#define IP "192.168.122.24"
int xiazai(int sfd,struct sockaddr_in sin,int fd,socklen_t socklen)
{
	char buf[516]="";
	char ack[4];
	short *p1=(short *)buf;
	*p1=htons(1);
	char *p2=buf+2;
	strcpy(p2,"helltaker.bmp");
	char *p3=p2+strlen(p2)+1;
	strcpy(p3,"octet");
	int len=4+strlen(p2)+strlen(p3);
	sendto(sfd,buf,len,0,(struct sockaddr*)&sin,sizeof(sin));
	while(1)
	{
		bzero(buf,sizeof(buf));
		int res=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&socklen);
		if(res<516)
		{
			write(fd,buf+4,res-4);
			break;
		}
		write(fd,buf+4,res-4);
		short *q1=(short *)(buf+2);

		short *p4=(short *)ack;
		*p4=htons(4);
		short *p5=(short *)(ack+2);
		*p5=*q1;
		sendto(sfd,ack,4,0,(struct sockaddr*)&sin,sizeof(sin));

	}
	printf("下载完成\n");
	return 0;

}
int main(int argc, const char *argv[])
{
	int fd=-1;
	if((fd=open("./helltaker.bmp",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
	{
		perror("open error");
		return -1;
	}
	int sfd=-1;
	if((sfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
	{
		perror("socket error");
		return -1;
	}

	int reuse=-1;
	if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1)
	{
		perror("setsockopt error");
		return -1;
	}

	struct sockaddr_in sin;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(PORT);
	sin.sin_addr.s_addr=inet_addr(IP);
	socklen_t socklen=sizeof(sin);
	int num;
	while(1)
	{
		printf("\t\t=======1.下载=======\n");
		printf("\t\t=======2.上传=======\n");
		printf("\t\t=======3.退出=======\n");
		printf("请输入功能:");
		scanf("%d",&num);
		while(getchar()!='\n');
		switch(num)
		{
			case 1:
				{
					xiazai(sfd,sin,fd,socklen);
				}
				break;
			case 2:
				{
					//shangchuan();
				}
				break;
			case 3 :
goto END;
			default:printf("输入有误,请重新输入\n");
		}
		printf("按任意键清屏\n");
		while(getchar()!='\n');
		system("clear");
	}
END:


	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1391305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字化转型:为何失败率居高不下,以及如何避免重蹈覆辙

在当今快速发展的数字化时代&#xff0c;许多企业纷纷投身于数字化转型的浪潮中&#xff0c;以期通过技术革新提升竞争力、优化运营、提高效率。然而&#xff0c;尽管数字化转型的潜在益处巨大&#xff0c;但失败率却居高不下&#xff0c;甚至导致企业陷入困境。 本文将深入探讨…

Git版本控制——分支

分支 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着可以把工作从开发主线上分离开来进行重大的Bug修改、开发新的功能&#xff0c;以免影响开发主线。 查看本地分支 git branch创建本地分支 git branch 分支名切换分支(checkout) git checkout 分支名创建…

jenkins url发生改变如何修改回来

问题&#xff1a; 我的jenkins服务器部署完后&#xff0c;此时url就已经固定了如下&#xff1a; 但是我更换了公网IP&#xff0c;url地址还是旧的&#xff0c;现在就需要修改一下配置文件&#xff1b; 修改配置文件 ($JENKINS_HOME/jenkins.model.JenkinsLocationConfiguratio…

java日志框架总结

一、日志框架简单分类介绍 java常用的日志框架、可以分为两组&#xff1a; 1、JCL、JUL、Log4j&#xff1b; 2、SLF4J、Log4j2、Logback&#xff1b; 其中第一组是比较早期的日志实现框架&#xff0c;JCL并不是具体的日志实现框架&#xff0c;JCL其实是定义了一…

SparkSQL——Dataset

Dataset Dataset 是什么&#xff1f; Testdef dataset1():Unit {// 1. 创建 SparkSessionval spark new SparkSession.Builder().master("local[6]").appName("dataset1").getOrCreate()// 2. 导入隐式转换import spark.implicits._// 3. 演示val sourceR…

单元测试之Stub和Mock

实例 Analyze类会检查filename的长度&#xff0c;如果小于8&#xff0c;我们就会使用一个实现IWebService的类来记录错误. 我们需要给Analyze方法写单元测试。 public class LogAnalyzer {private IWebService service;private IEmailService email;public IWebService Serv…

小程序基础学习(登录)(重点核心)

首先&#xff0c;获取用户获取code&#xff0c;然后带着code向服务器发送请求&#xff0c;并把返回的token存入缓存中 然后&#xff0c;判断token是否过期如果过期则要重新登录 页面代码 <!--pages/me/me.wxml--> <navigation-bar title"牧原" back"{…

计算机网络 网络安全

网络安全 网络安全问题概述 计算机网络面临的女全性威胁 计算机网络的通信而临两大类威胁&#xff0c;即被动攻击和主动攻击 被动攻击是指攻击者从网络上窃听他人的通信内容。通常把这类攻击称为截获。在被动攻击中&#xff0c;攻击者只是观察和分析某一个协议数据单元 PDU…

Unity解决Udp客户端无法接收数据的问题

Unity解决Udp客户端无法接收数据的问题 在我之前做过的项目中&#xff0c;其中不少涉及Udp客户端的项目。在这些项目中&#xff0c;一般只需要实现客户端向服务器端发送数据的功能就可以了&#xff0c;一般都不用接收服务器端发送的数据&#xff0c;但是也有同学使用了我分享的…

接近8000字的SpringSpring常用注解总结!安排

接近8000字的Spring/Spring常用注解总结&#xff01;安排 为什么要写这篇文章&#xff1f; 最近看到网上有一篇关于 SpringBoot 常用注解的文章被转载的比较多&#xff0c;我看了文章内容之后属实觉得质量有点低&#xff0c;并且有点会误导没有太多实际使用经验的人&#xff…

ceph数据分布式存储

单机存储的问题 存储处理能力不足 传统的IDE的IO值是100次/秒&#xff0c;SATA固态磁盘500次/秒&#xff0c;固态硬盘达到2000-4000次/秒。即使磁盘的IO能力再大数十倍&#xff0c;也不够抗住网站访问高峰期数十万、数百万甚至上亿用户的同时访问&#xff0c;这同时还要受到主机…

1、机器学习模型的工作方式

第一步,如果你是机器学习新手。 本课程所需数据集夸克网盘下载链接:https://pan.quark.cn/s/9b4e9a1246b2 提取码:uDzP 文章目录 1、简介2、决策树优化3、继续1、简介 我们将从机器学习模型如何工作以及如何使用它们的概述开始。如果你以前做过统计建模或机器学习,这可能感…

【机器学习】强化学习(二)基于动态规划的算法

值函数可以分为状态价值函数和动作价值函数&#xff0c;分别适用于哪些强化学习问题 二、基于动态规划的算法 2.1 策略迭代算法 示例&#xff1a; (改进的) 策略迭代 代码 首先定义了一些参数&#xff0c;如奖励、折扣因子、最大误差等&#xff0c;然后初始化了一个网格世界的环…

【JVM调优系列】如何导出堆内存文件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【pgBackRest备份工具使用】

一、工具介绍 pgBackRest是PostgreSQL数据库的一个开源备份工具&#xff0c;支持全量、增量和差异备份。这一点优于PG原生的备份工具pg_basebackup&#xff0c;因为pg_basebackup不支持增量备份&#xff0c;并且支持备份完整性检查等等。pgBackRest v2.49是当前的稳定版本。 项…

新手怎么投稿各大网络媒体网站

在当今信息爆炸的时代&#xff0c;网络媒体已成为人们获取新闻信息的主要渠道之一。无论是企业宣传、个人推广&#xff0c;还是新闻报道&#xff0c;都离不开网络媒体的力量。而要将自己的信息传达到更广大的受众群体&#xff0c;投稿各大网络媒体网站就成为了一个重要的环节。…

ARM day2、day3 汇编

一、汇编学习&#xff1a;可以向上理解软件、向下感知硬件 二、符号&#xff08;注释&#xff09; 注释#注释&#xff08;放在行首表示注释一行&#xff09;/* */注释#数字立即数&#xff1a;一种标号&#xff08;比如main: loop:&#xff09;.text .end换行…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-9 可观测性与分离原理

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-9 可观测性与分离原理

【Java JVM】栈帧

执行引擎是 Java 虚拟机核心的组成部分之一。 在《Java虚拟机规范》中制定了 Java 虚拟机字节码执行引擎的概念模型, 这个概念模型成为各大发行商的 Java 虚拟机执行引擎的统一外观 (Facade)。 不同的虚拟机的实现中, 通常会有 解释执行 (通过解释器执行)编译执行 (通过即时编…

Servlet项目教学(附实例代码)

【员工信息管理】 1.员工信息管理 1.1 介绍 用户进行登录后,可以对员工信息进行管理(增删查改),等操作.如果用户没有登录,不能访问员工操作页面.并且员工操作页面显示当前登录用户信息. 1.2 技术点 使用VueElementUI充当前端界面,使用ServletJDBCMysql提供数据管理控制.后端统…