当前位置: 首页 > news >正文

2024.03.01作业

1. 基于UDP的TFTP文件传输

#include "test.h"#define SER_IP "192.168.1.104"
#define SER_PORT 69
#define IP "192.168.191.128"
#define PORT 9999enum mode
{TFTP_READ = 1,TFTP_WRITE = 2,TFTP_DATA = 3,TFTP_ACK = 4,TFTP_ERR = 5
};void get_filename(char* filename, int size)
{bzero(filename, size);printf("请输入文件名:");fgets(filename, size, stdin);filename[strlen(filename) - 1] = 0;
}void rw_request(char* pack, int pack_size, char* filename, int mode, int* packlen)
{bzero(pack, pack_size); short* p1 = (short*)pack;*p1 = htons(mode);char* p2 = (char*)(p1 + 1);strcpy(p2, filename);char* p4 = p2 + strlen(p2) + 1;strcpy(p4, "octet");*packlen = 4 + strlen(p2) + strlen(p4);
}void pack_data(char* pack, int num, char* rbuf, int len, int* packlen)
{bzero(pack, sizeof(pack)); short* p1 = (short*)pack;*p1 = htons(TFTP_DATA);short* p2 = p1 + 1;*p2 = htons(num);char* p4 = (char*)(p2 + 1);for (int i = 0; i < len; i++){*(p4 + i) = rbuf[i];}*packlen = 4 + len;
}void pack_ack(char* ack, int num)
{bzero(ack, 4);short* a = (short*)ack;*a = htons(TFTP_ACK);*(a + 1) = htons(num);
}void pack_errmsg(char* pack, char* msg, int* packlen)
{bzero(pack, sizeof(pack));short* p = (short*)pack;*p = htons(TFTP_ERR);*(p + 1) = htons(0);char* errmsg = (char*)(p + 2);strcpy(errmsg, msg);*packlen = 4 + strlen(errmsg);
}void client_recv(int sfd, struct sockaddr_in* sin, socklen_t* socklen)
{char filename[128];get_filename(filename, sizeof(filename));char pack[516] = "";int packlen = 0;rw_request(pack, sizeof(pack), filename, TFTP_READ, &packlen);sendto(sfd, pack, packlen, 0, (struct sockaddr*)sin, *socklen);int fd = -1;if ((fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0664)) == -1){perror("create file error");return;}char wbuf[512] = "";int block_num = 0;while (1){bzero(pack, sizeof(pack));packlen = recvfrom(sfd, pack, sizeof(pack), 0, (struct sockaddr*)sin, socklen);short* p = (short*)pack;short code = ntohs(*p);short num = ntohs(*(p + 1));if (3 == code && num == ++block_num){write(fd, pack + 4, packlen - 4);char ack[4];pack_ack(ack, block_num);sendto(sfd, ack, 4, 0, (struct sockaddr*)sin, *socklen);if (packlen < 512){printf("下载完成\n");close(fd);break;}}}
}void client_send(int sfd, struct sockaddr_in* sin, socklen_t* socklen)
{char filename[128];get_filename(filename, sizeof(filename));char pack[516] = "";int packlen = 0;rw_request(pack, sizeof(pack), filename, TFTP_WRITE, &packlen);sendto(sfd, pack, packlen, 0, (struct sockaddr*)sin, *socklen);int fd = -1;if ((fd = open(filename, O_RDONLY)) == -1){perror("open error");return;}char ack[4];char rbuf[512] = "";int len;while (1){recvfrom(sfd, ack, 4, 0, (struct sockaddr*)sin, socklen);short* a = (short*)ack;short code = ntohs(*a);short num = ntohs(*(a + 1));if (4 == code && (len = read(fd, rbuf, sizeof(rbuf))) > 0){pack_data(pack, num + 1, rbuf, len, &packlen);sendto(sfd, pack, packlen, 0, (struct sockaddr*)sin, *socklen);bzero(rbuf, sizeof(rbuf));}else{printf("上传成功\n");break;}}
}int main(int argc, char const *argv[])
{int sfd = -1;sfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == sfd){perror("socket error");return -1;}printf("sfd = %d\n", sfd);int reuse = 1;if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){perror("setsockopt error");return -1;}printf("端口号快速重用成功\n");struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);socklen_t socklen = sizeof(sin);printf("1.上传\n");printf("2.下载\n");printf("0.退出\n");printf("请输入:");int n;scanf("%d", &n);getchar();if (1 == n){client_send(sfd, &sin, &socklen);}else if (2 == n){client_recv(sfd, &sin, &socklen);}else{printf("输入错误\n");}close(sfd);return 0;
}

2. TCP机械臂测试

#include "test.h"#define SER_IP "192.168.42.106"
#define SER_PORT 8888int main(int argc, char const *argv[])
{int sfd = -1;sfd = socket(AF_INET, SOCK_STREAM, 0);if (-1 == sfd){perror("socket error");return -1;}printf("sfd = %d\n", sfd);int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){perror("setsockopt error");return -1;}printf("端口号快速重用成功\n");struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);if (connect(sfd, (struct sockaddr*)&sin, sizeof(sin)) == -1){perror("connect error");return -1;}struct termios tms_old, tms_new;char rbuf[5] = {0xff, 0x02, 0x00, 0x00, 0xff};unsigned char bbuf[5] = {0xff, 0x02, 0x01, 0x00, 0xff};tcgetattr(0, &tms_old);tms_new = tms_old;tms_new.c_lflag &= ~(ICANON | ECHO);tcsetattr(0, TCSANOW, &tms_new);while (1){unsigned char ch = getchar();if (ch == 'd' || ch == 'D'){rbuf[3] += 1;if (rbuf[3] >= 90){rbuf[3] = 90;}send(sfd, rbuf, sizeof(rbuf), 0);}if (ch == 'a' || ch == 'A'){rbuf[3] -= 1;if (rbuf[3] <= -90){rbuf[3] = 90;}send(sfd, rbuf, sizeof(rbuf), 0);}if (ch == 's' || ch == 'S'){bbuf[3] += 1;if (bbuf[3] >= 180){bbuf[3] = 180;}send(sfd, bbuf, sizeof(bbuf), 0);}if (ch == 'w' || ch == 'W'){bbuf[3] -= 1;if (bbuf[3] <= 0){bbuf[3] = 0;}send(sfd, bbuf, sizeof(bbuf), 0);}}tcsetattr(0, TCSANOW, &tms_old);close(sfd);return 0;
}

相关文章:

2024.03.01作业

1. 基于UDP的TFTP文件传输 #include "test.h"#define SER_IP "192.168.1.104" #define SER_PORT 69 #define IP "192.168.191.128" #define PORT 9999enum mode {TFTP_READ 1,TFTP_WRITE 2,TFTP_DATA 3,TFTP_ACK 4,TFTP_ERR 5 };void get_…...

力扣hot100:42.接雨水

什么时候能用双指针&#xff1f; &#xff08;1&#xff09;对撞指针&#xff1a; ①两数和问题中可以使用双指针&#xff0c;先将两数和升序排序&#xff0c;可以发现规律&#xff0c;如果当前两数和大于target&#xff0c;则右指针向左走。 ②接雨水问题中&#xff0c;左边最…...

搜索回溯算法(DFS)1------递归

目录 简介&#xff1a; 递归问题解题的思路模板 例题1&#xff1a;汉诺塔 例题2&#xff1a;合并两个有序链表 例题3&#xff1a;反转链表 例题4&#xff1a;两两交换链表中的节点 例题5&#xff1a;Pow&#xff08;x,n&#xff09;-快速幂 结语&#xff1a; 简介&…...

workstation 用途

一 workstation 用途 强大的桌面虚拟化 允许创造多种操作系统可以不用重启就跨不同操作系统进行操作可以提供隔离的安全环境 连接到vsphere 可以远程登陆服务器管理物理主机和虚拟主机任何时间都可登陆提高虚拟机效率 为任何平台开发和测试 1&#xff09;借助一台单一本地…...

【三维重建】【SLAM】SplaTAM:基于3D高斯的密集RGB-D SLAM(CVPR 2024)

题目&#xff1a;SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM 地址&#xff1a;spla-tam.github.io 机构&#xff1a;CMU&#xff08;卡内基梅隆大学&#xff09;、MIT&#xff08;美国麻省理工&#xff09; 总结&#xff1a;SplaTAM&#xff0c;一个新…...

Go Barrier栅栏

1. 简介 实现与pythonthreading.Barrier库类似的功能&#xff0c;多线程同时等待达到指定数量一起放行。 有待改进地方&#xff1a; wait方法没有支持context控制。 2. 代码 import ("context""golang.org/x/sync/semaphore""sync/atomic" …...

[蓝桥杯 2023 省 B] 冶炼金属

P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考题解&#xff1a; #C3150——蓝桥杯2023年第十四届省赛真题-冶炼金属(分块)-Dotcpp编程社区 https://www.bilibili.com/video/BV1wc411x7KU/?spm_id_from333.1007.top_right_bar_windo…...

续Java的执行语句、方法--学习JavaEE的day07

day07 一、特殊的流程控制语句 break(day06) continue 1.理解&#xff1a; 作用于循环中&#xff0c;表示跳过循环体剩余的部分&#xff0c;进入到下一次循环 做实验&#xff1a; while(true){ System.out.println(“111”); System.out.println(“222”); if(true){ conti…...

公网IP怎么获取?

公网IP是网络中设备的唯一标识符&#xff0c;用于在Internet上进行通信和定位。对于普通用户来说&#xff0c;了解如何获取自己的公网IP是很有必要的&#xff0c;本文将介绍几种获取公网IP的方法。 方法一&#xff1a;通过路由器查询 大多数家庭和办公室使用的路由器都会有一个…...

连接未来:探索嵌入式系统的智能化之路

连接未来&#xff1a;探索嵌入式系统的智能化之路 嵌入式系统的智能化是连接未来的关键之一。以下是对这一主题的小点论述&#xff1a; 1. 嵌入式系统的定义和特点 嵌入式系统是一种特殊用途的计算机系统&#xff0c;通常嵌入在其他设备中&#xff0c;具有小巧、低功耗、实时…...

基于STM32制作的示波器(可对任意信号进行描点)

基于STM32制作的示波器&#xff08;可对任意信号进行描点&#xff09; 注意&#xff1a;用的屏幕是TFT-LCD&#xff08;MCU 屏&#xff09;正点原子同款屏幕 液晶显示器&#xff0c;即 Liquid Crystal Display&#xff0c;利用了液晶导电后透光性可变的特性&#xff0c;配合显…...

WEB APIs (5)

window对象 BOM&#xff08;浏览器对象模型&#xff09; 其为js操作浏览器提供了方法 window对象是一个全局变量&#xff0c;是BOM树根节点 BOM的属性和方法都是window的&#xff0c;如document、console.log()等 var定义在全局全局作用域中的变量、函数都会变成window对象…...

物联网常见协议篇

在物联网环境中&#xff0c;物联网协议承担着关键作用&#xff0c;而新手了解物联网协议如传输协议、通讯协议和行业协议等。 一、物联网协议 物联网协议是物联网环境中的关键组成部分&#xff0c;它承担着设备间通信和数据传输的重要任务。这些协议根据其作用的不同&#xff…...

Kubernetes-1

学习Kubernetes第一天 k8s-11、什么是Kubernetes2、配置Kubernetes2.1、准备三台全新的虚拟机2.2、关闭防火墙和SElinux2.3、修改主机名2.4、升级操作系统(三台一起操作)2.5、配置主机hosts文件&#xff0c;相互之间通过主机名互相访问2.6、配置master和node之间的免密通道2.7、…...

SpringMVC框架②

三、RequestMapping注解 3、RequestMapping注解的value属性 必须设置 发送一个请求最直观的表示方式就是一个请求路径 altenter 进入接口方法 再用 alte7 查看里面的属性 value值可以是数组 value{"test","test1"} 只满足任何一个请求地址就会调用此方…...

springboot230基于Spring Boot在线远程考试系统的设计与实现

在线远程考试系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到…...

盘点:国家智能算力中心

文章目录 1. Main2. My thoughtsReference 1. Main 按照《中国算力白皮书&#xff08;2022年&#xff09;》的定义&#xff0c;算力主要分为四部分&#xff1a;通用算力、智能算力、超算算力、边缘算力。通用算力以CPU芯片输出的计算能力为主&#xff1b;智能算力以GPU、FPGA、…...

【C++】7-2 寻找完美数 分数 10

7-2 寻找完美数 分数 10 全屏浏览 切换布局 作者 李祥 单位 湖北经济学院 所有真因子之和小于其本身的数称为亏数。 如&#xff1a;4 的真因子 1、2 之和为 3&#xff0c;小于 4&#xff0c;是亏数。 所有真因子之和大于其本身的数称为盈数。 如&#xff1a;12 的真因子 1…...

基于Mahout实现K-Means聚类

需求分析 需要对数据集进行预处理&#xff0c;选择合适的特征进行聚类分析&#xff0c;确定聚类的数量和初始中心点&#xff0c;调用Mahout提供的K-Means算法进行聚类计算&#xff0c;评估聚类结果的准确性和稳定性。同时&#xff0c;需要对Mahout的使用和参数调优进行深入学习…...

科技的成就(五十七)

535、Machine Learning "1959 年 7 月&#xff0c;塞缪尔首创 Machine Learning 一词。塞缪尔在“Some Studies in Machine Learning Using theGame of Checkers”一文中给 Machine Learning 下了个非正式定义&#xff1a;没有明确编程指令的情况下&#xff0c;能让计算机…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...