1.17 day4 IO网络编程

用udp实现tftp下载和上传功能

#include <myhead.h>
#define PORT 69
#define IP "192.168.122.24"
int shangchuan(int sfd,struct sockaddr_in sin,socklen_t socklen)
{int cfd=-1;if((cfd=open("./01udpk.c",O_RDONLY))==-1){perror("open error");return -1;}char rbuf[516]="";short a=1;int SIZE=sprintf(rbuf,"%c%c%s%c%s%c",0,2,"./01udpk.c",0,"octet",0);sendto(sfd,rbuf,SIZE,0,(struct sockaddr*)&sin,sizeof(sin));while(1){recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,&socklen);bzero(rbuf,sizeof(rbuf));int sre=read(cfd,rbuf+4,512);if(sre==0){break;}short *a1=(short*)rbuf;*a1=htons(3);short *a2=(short*)(rbuf+2);*a2=htons(a++);sendto(sfd,rbuf,sre+4,0,(struct sockaddr*)&sin,sizeof(sin));}close(cfd);
}
int xiazai(int sfd,struct sockaddr_in sin,socklen_t socklen)
{int fd=-1;if((fd=open("./helltaker.bmp",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1){perror("open error");return -1;}char buf[516]="";char ack[4]="";int len=sprintf(buf,"%c%c%s%c%s%c",0,1,"./helltaker.bmp",0,"octet",0);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");close(fd);}
int main(int argc, const char *argv[])
{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,socklen);}break;case 2:{shangchuan(sfd,sin,socklen);}break;case 3 :goto END;default:printf("输入有误,请重新输入\n");}printf("按任意键清屏\n");while(getchar()!='\n');system("clear");}
END:close(sfd);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓手机变iOS!

Launcher iOS 16 - 安卓手机秒变iOS Launcher iOS 16 是一款iOS启动器&#xff0c;可以将安卓手机桌面变成iOS样子&#xff0c;还有iOS的开机动画和景深效果&#xff01; 下载链接&#xff1a;【Launcher iOS 16】 ​

css保留格式文本换行

也可以用富文本保留文本格式 恰逢场景需要且能使代码简洁故用css实现 white-space:xxx; white-space: pre-line; 连续的空白符会被合并。在遇到换行符或者<br>元素&#xff0c;或者需要为了填充「行框盒子(line boxes)」时会换行。 white-space: pre; 连续的空白符会被…

【C++】入门C++前想要了解的小知识

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 目录 1. 前言2. 什么是C3. C的发展史4. C的重要性4.1 语言的使用广泛度4.2 在工作领域中4.3 在校招领域中 5. 如何学习C5.1 看看别人怎么学习的5.2 自己怎么学 1. 前言 今天开…

嵌入式软件面试之程序在存储器中的分布

Hi, 大家好&#xff0c;今天阿目分享的是一个嵌入式软件面试的常见问题&#xff0c;内存分布或者说程序在内存中的布局&#xff0c;我们写的程序是按照怎么的准则放在内存中的&#xff1f; 一般有操作系统的嵌入式设备&#xff0c;都会有一个Bootloader, 它负责在上电后初始化…

k8s之对外服务ingress

一、service 1、service作用 ①集群内部&#xff1a;不断跟踪pod的变化&#xff0c;不断更新endpoint中的pod对象&#xff0c;基于pod的IP地址不断变化的一种服务发现机制&#xff08;endpoint存储最终对外提供服务的IP地址和端口&#xff09; ②集群外部&#xff1a;类似负…

【Java数据结构】03-二叉树,树和森林

4 二叉树、树和森林 重点章节&#xff0c;在选择&#xff0c;填空&#xff0c;综合中都有考察到。 4.1 掌握二叉树、树和森林的定义以及它们之间的异同点 1. 二叉树&#xff08;Binary Tree&#xff09; 定义&#xff1a; 二叉树是一种特殊的树结构&#xff0c;其中每个节点…

【Filament】材质系统

1 前言 本文主要介绍 Filament 的材质系统&#xff0c;官方介绍详见 → Filament Materials Guide。材质系统中会涉及到一些空间和变换的知识点&#xff0c;可以参考&#xff1a;【Unity3D】空间和变换、【Unity3D】Shader常量、变量、结构体、函数、【OpenGL ES】MVP矩阵变换、…

Java、C#、Python间的Battle

一、编译原理和开发效率 编译速度&#xff1a; C# &#xff08;约大于等于&#xff09; JAVA > Python python的编译原理 前提&#xff1a;python 3.6 python不会直接编译源码 而是把源码直接扔给解释器&#xff0c;这种方式 使得python非常灵活&#xff0c;让它的开发效…

Windows 下使用C#开启蓝牙(未解决的坑)

需求 当程序检测到蓝牙未打开时需要程序自动将W10的蓝牙开启。 资料 Turn on/off Bluetooth radio/adapter from cmd/powershell in Windows 10 - Super User 上的这个连接是通过powershell 开启蓝牙具体代码如下 [CmdletBinding()] Param ([Parameter(Mandatory$true)][V…

【MCAL】MCU模块详解

目录 前言 正文 1. MCU模块介绍 2. MCU依赖的模块 3. MCU模块提供服务 3.1 时钟的初始化 3.2 MCU模式的配置 3.3 MCU软件复位功能 3.4 RAM的初始化 4.MCU重要数据类型 4.1 Mcu_ResetType 4.2 Mcu_ModeType 5. MCU重要API 5.1 Mcu_Init 5.2 Mcu_InitClock 5.3 M…

Net Core Ocelot+Consul实现网关、服务注册、服务发现

什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的微…

PyTorch项目源码学习(3)——Module类初步学习

torch.nn.Module Module类是用户使用torch来自定义网络模型的基础&#xff0c;Module的设计要求包括低耦合性&#xff0c;高模块化等等。一般来说&#xff0c;计算图上所有的子图都可以是Module的子类&#xff0c;包括卷积&#xff0c;激活函数&#xff0c;损失函数节点以及相…