1.16 day3 IO网络编程

用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;
}

相关推荐

  1. day11网络编程

    2024-01-17 04:30:03       19 阅读
  2. 网络编程 day3

    2024-01-17 04:30:03       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-17 04:30:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-17 04:30:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-17 04:30:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-17 04:30:03       20 阅读

热门阅读

  1. 暴力求解力扣两数之和

    2024-01-17 04:30:03       33 阅读
  2. DNS记录类型介绍(A记录、MX记录、NS记录等)

    2024-01-17 04:30:03       30 阅读
  3. ROS OpenCV ROI

    2024-01-17 04:30:03       25 阅读
  4. Android 13 - Media框架(31)- ACodec(七)

    2024-01-17 04:30:03       35 阅读
  5. 我被领导骂了

    2024-01-17 04:30:03       29 阅读
  6. SpringCloud服务之间Feign调用不会带上请求头header

    2024-01-17 04:30:03       31 阅读
  7. 主键、外键、建表范式、MySQL索引、用户管理

    2024-01-17 04:30:03       29 阅读
  8. 1. FPGA概述

    2024-01-17 04:30:03       25 阅读
  9. 1.5 面试经典150题 - 轮转数组

    2024-01-17 04:30:03       31 阅读
  10. Spring Boot整理-Spring Boot的优势

    2024-01-17 04:30:03       27 阅读
  11. C语言中的命名规则(期末版)

    2024-01-17 04:30:03       29 阅读
  12. 什么是WiMAX技术?WiMAX宽带技术的关键技术

    2024-01-17 04:30:03       30 阅读