嵌入式学习-网络编程-Day3

嵌入式学习-网络编程-Day3

一、思维导图

在这里插入图片描述

二、作业

1.tftp下载模型简单实现

demo.c

#include <myhead.h>

int main(int argc, const char *argv[])
{
	//创建用于通信的套接字文件描述符
	int cfd=-1;
	if((cfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
	{
		perror("socket error");
		return -1;
	}

	//可以不绑定
	
	//填充服务器的地址信息结构体
	struct sockaddr_in sin;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(69);
	sin.sin_addr.s_addr=inet_addr("192.168.122.65");


	char buf[516]="";	
	int menu;
	while(1)
	{
		printf("\t\t=====1、上传=====\n");
		printf("\t\t=====2、下载=====\n");
		printf("\t\t=====3、退出=====\n");
		printf("请输入功能选项:");
		scanf("%d",&menu);
		switch(menu)
		{
	/*	case 1:
			{
			}
			break;*/
		case 2:
			{
				//发送要下载的文件名
				short *p1=(short *)buf;  //p1指向操作码
				*p1=htons(1);
				char *p2=buf+2;          //p2指向文件名
				strcpy(p2,"5.png");
				char *p3=p2+strlen(p2)+1;//p3指向模式名
				strcpy(p3,"octet");
				int len=4+strlen(p2)+strlen(p3);
				sendto(cfd,buf,len,0,(struct sockaddr*)&sin,sizeof(sin));
				socklen_t socklen=sizeof(sin);
				
				//fd打开目标文件
				int fd=-1;
				if((fd=open("/home/ubuntu/network/day3/1.png",O_WRONLY|O_TRUNC|O_CREAT,0664))==-1)
				{
					perror("open error");
					return -1;
				}

				int count=1;  //块编号
				short *p4=p1+1;//p4指向块编号的指针
				char *p5=buf+4;//p5写数据的指针
				memset(buf,0,sizeof(buf));
				while(1)
				{
					//读取数据放入buf
					int res=recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&socklen);
					printf("操作码=%d,res=%d\n",ntohs(*p1),res);
					if(*p1==ntohs(3))//写入
					{
						count=ntohs(*p4);
						//printf("sizeof(p5)=%ld\n",sizeof(p5));
						printf("接收块编号为%d\t",count);
						if(res<516)
						{
							write(fd,p5,res-4);
							printf("拷贝完成\n");
							break;
						}
						//写入数据
						if(write(fd,p5,512)==-1)
						{
							perror("write error");
							return -1;
						}else
						{
							printf("写入成功\n");
							//返回ACK
							memset(buf,0,sizeof(buf));
							*p1=htons(4);    //返回ack操作码为4
							printf("返回块编号为%d\n",count);

							*p4=htons(count);//返回块编号
							sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin));

						}
					

					}else if(*p1==ntohs(5))
					{
						puts("");
						printf("差错码为%d\n",*p2);
						printf("接收数据出错\n");
						return -1;
					}
				}
			close(fd);
			}
			break;
		case 3:
			{
				return 0;
			}
			break;
		default:
			printf("输入错误\n");
		}
	}


	close(cfd);
	return 0;
}

运行结果
在这里插入图片描述

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入系统-从SoC芯片到系统是一本介绍嵌入系统设计的书籍。嵌入系统是指集成了计算机处理器、内存、输入输出接口以及其他外设的微型计算机系统,用于在特定的应用领域中完成特定任务。而SoC芯片则是一种集成了多个功能模块的单片集成电路,包含了处理器核心、内存控制器、外设接口以及其他系统组件。 这本书从SoC芯片开始,首先介绍了SoC的基本概念和功能组成。然后详细解释了SoC芯片的架构设计和硬件设计流程,包括处理器选择、内存和外设的设计原则,以及集成电路的物理设计等。此外,还介绍了SoC芯片的性能评估和调试方法,帮助读者理解如何针对具体应用需求对SoC芯片进行调整和优化。 接下来,书籍重点讲解了嵌入系统的软件设计和开发。从操作系统的选择与配置开始,包括嵌入Linux、RTOS等不同的选择。然后介绍了嵌入软件开发工具和编程语言,包括C、C++以及汇编语言等。同时,还讲解了嵌入系统的驱动程序开发和应用程序设计等方面的知识。 最后,该书还对嵌入系统的测试和验证、面向网络连接的嵌入系统以及面向嵌入系统安全等相关主题进行了介绍。为读者提供了全面而深入的内容,让其了解从SoC芯片到嵌入系统的设计和开发过程。 总之,嵌入系统-从SoC芯片到系统是一本全面介绍嵌入系统设计的书籍,内容涵盖了硬件和软件两个方面。对于学习和了解嵌入系统的人员来说,是一本相当实用的参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值