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

day03-网络编程

1>TCP机械臂测试

#include<myhead.h>
#define SER_IP "10.211.55.11"
#define SER_PORT 8888
#define CLI_IP "10.211.55.9"
#define CLI_PORT 6666
//客户端
int main(int argc, const char *argv[])
{//1、创建用于通信的套接字文件描述符int cfd = socket(AF_INET, SOCK_STREAM, 0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n", cfd);          //3//将端口号快速重用(设置广播/组播)int reuse = 1;if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1)PRINT_ERR("");printf("端口号快速重用成功\n");
/*//2、绑定(非必须)//2.1struct sockaddr_in cin;cin.sin_family=AF_INET;cin.sin_port=htons(CLI_PORT);cin.sin_addr.s_addr=inet_addr(CLI_IP);//2.2if((bind(cfd,(struct sockaddr*)&cin,sizeof(cin))) == -1)PRINT_ERR("");*///3、连接服务器//3.1填充要连接的服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;   //地址族sin.sin_port =     htons(SER_PORT);   //端口号sin.sin_addr.s_addr = inet_addr(SER_IP);   //ip地址//3.2 连接服务器if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//4、数据收发char rbuf[5]={0xff,0x02,0x00,0x00,0xff};unsigned char bbuf[5]={0xff,0x02,0x01,0x00,0xff};//初始化send(cfd,rbuf,sizeof(rbuf),0);sleep(1);send(cfd,bbuf,sizeof(bbuf),0);char key = 0;   //接收字符while(1){scanf("%c",&key);if(key == '\n')continue;getchar();switch (key){case 'W':case 'w':{rbuf[3]+=5;if(rbuf[3]>=90)rbuf[3]=90;send(cfd,rbuf,sizeof(rbuf),0);}break;case 'S':case 's':{rbuf[3]-=5;if(rbuf[3]<=-90)rbuf[3]=-90;send(cfd,rbuf,sizeof(rbuf),0);}break;case 'D':case 'd':{bbuf[3]+=5;if(bbuf[3]>=180)bbuf[3]=180;send(cfd,bbuf,sizeof(bbuf),0);}break;case 'A':case 'a':{bbuf[3]-=5;if(bbuf[3]>=180)bbuf[3]=0;send(cfd,bbuf,sizeof(bbuf),0);}break;default:printf("输入错误,请重新输入\n");break;}}//5、关闭套接字close(cfd);return 0;
}

2>基于UDP的TFTP文件传输

#include<myhead.h>
#define SER_IP "10.211.55.11"
#define SER_PORT 69//客户端
void menu()
{printf("*************************\n");printf("*\t 1.下载  \t*\n");printf("*\t 2.上传  \t*\n");printf("*\t 0.退出  \t*\n");printf("*************************\n");
}
int rev(int choice)
{//1、创建用于通信的套接字文件描述符int cfd = socket(AF_INET, SOCK_DGRAM, 0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n", cfd);          ////3.填充要连接的服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;   //地址族sin.sin_port =     htons(SER_PORT);   //端口号sin.sin_addr.s_addr = inet_addr(SER_IP);   //ip地址socklen_t socklen = sizeof(sin);//3、收发数据char pack[516] = "";char ack[4];//校验收到的块编号int N = 0;char filename[128]="";printf("请输入要下载的文件名:");scanf("%s",filename);//组件协议包:下载请求short *p1 = pack;*p1 = htons(choice);          //设置操作码char *p2 = p1+1;strcpy(p2, filename);         //文件名char *p4 = p2 + strlen(p2) + 1;strcpy(p4, "octet");            //模式位int packlen = 4+strlen(p2) + strlen(p4);    //请求包的大小//向服务器发送请求包sendto(cfd, pack, packlen, 0, (struct sockaddr*)&sin, sizeof(sin));p1=NULL;free(p1);p2=NULL;free(p2);p4=NULL;free(p4);//建立文件int fd = -1;if((fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0664)) == -1)PRINT_ERR("");while(1){bzero(pack, sizeof(pack));//收取服务器发来的数据包int ret=recvfrom(cfd, pack, sizeof(pack), 0, (struct sockaddr*)&sin, &socklen);//获取发送来的操作码short *p=pack;short code = ntohs(*p);//获取发送来的块编号short num = ntohs(*(p + 1));
//        printf("%d %d %d\n",code,num,ret);write(fd,pack+4,ret-4);//判断数据包的是否为3  以及 数据包数据内容是否为512if(3 == code && num == N + 1){N++;//如果为512,则读取后,回复一个应打包,继续接收下一个// 组装ACKshort *a=ack;*a = htons(4);*(a + 1) = htons(num);sendto(cfd, ack, 4, 0, (struct sockaddr*)&sin, sizeof(sin));if(ret<512){printf("下载完成!\n");break;}}}//5、关闭套接字close(cfd);}int snd(int choice)
{//1、创建用于通信的套接字文件描述符int cfd = socket(AF_INET, SOCK_DGRAM, 0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n", cfd);          //3//3.填充要连接的服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;   //地址族sin.sin_port =     htons(SER_PORT);   //端口号sin.sin_addr.s_addr = inet_addr(SER_IP);   //ip地址socklen_t socklen = sizeof(sin);//3、收发数据char pack[516] = "";char ack[4];char filename[128]="";printf("请输入要上传的文件名:");scanf("%s",filename);//组件协议包:下载请求short *p1 = pack;*p1 = htons(choice);          //设置操作码char *p2 = p1+1;strcpy(p2, filename);         //文件名char *p4 = p2 + strlen(p2) + 1;strcpy(p4, "octet");            //模式位int packlen = 4+strlen(p2) + strlen(p4);    //请求包的大小//向服务器发送请求包sendto(cfd, pack, packlen, 0, (struct sockaddr*)&sin, sizeof(sin));p1=NULL;free(p1);p2=NULL;free(p2);p4=NULL;free(p4);int ret = 0;//打开文件int fd = -1;if((fd=open(filename,O_RDONLY)) == -1)PRINT_ERR("");char rbuf[512]="";while(1){//收取服务器发来的ackrecvfrom(cfd, ack, 4, 0, (struct sockaddr*)&sin, &socklen);//获取发送来的操作码short *a=ack;short code = ntohs(*a);//获取发送来的块编号short num = ntohs(*(a + 1));//        printf("%d %d \n",code,num);if(4 == code && (ret = read(fd,rbuf,sizeof(rbuf)))>0){bzero(pack, sizeof(pack));short *p1 = pack;*p1 = htons(3);short *p2 = p1 + 1;*p2 = htons(num+1);short *p4 = p2 + 1;strcpy(p4, rbuf);            //模式位packlen=4+strlen(rbuf);
//            printf("%d %d \n",num,packlen);sendto(cfd, pack, packlen, 0, (struct sockaddr*)&sin, sizeof(sin));}else{printf("上传完成!\n");break;}}//5、关闭套接字close(cfd);
}int main(int argc, const char *argv[])
{int choice = 0;while (1){menu();printf("请输入操作:");scanf("%d",&choice);switch (choice){case 1: rev(choice);break;case 2: snd(choice);break;case 0: exit(0);break;default:printf("输入错误,请重新输入\n");break;}getchar();getchar();system("clear");}return 0;
}

相关文章:

day03-网络编程

1>TCP机械臂测试 #include<myhead.h> #define SER_IP "10.211.55.11" #define SER_PORT 8888 #define CLI_IP "10.211.55.9" #define CLI_PORT 6666 //客户端 int main(int argc, const char *argv[]) {//1、创建用于通信的套接字文件描述符int …...

Java反射,动态代理。笔记

1.pathClass Loader 和 Dex ClassLoader 在Android 5.0以下的版本中,两者之间的区别为: DexClassLoader:可加载jar、apk和dex」可以从SD卡中加载PathClassLoader:只能加载已安裝到系統中(即/data/app目录下)的apk文件但是随着Android版本的升级,到Android …...

作为团队开发组长你需要做的:

当你需要开始团队开发时&#xff0c;以下是一些你可能需要知道和使用的工具、实践和原则&#xff1a; 1. 版本控制系统 (VCS): 使用版本控制系统&#xff08;如Git&#xff09;来管理代码。这能确保团队成员协同工作时能够跟踪和管理代码的变更。创建分支进行开发&#xff0c…...

Windows安装Neo4j数据库教程(3.X版本)

安装java的jdk&#xff08;jdk1.8仅支持Neo4j 3.X版本&#xff09;去 Index of /doc/neo4j/ 下载目标版本的Windows zip安装包将安装包解压到任意目录&#xff0c;并记住解压后带版本号的文件夹路径添加系统环境变量&#xff0c;变量名&#xff1a;NEO4J_HOME&#xff0c;变量值…...

无人机飞行控制系统技术,四旋翼无人机控制系统建模技术详解

物理建模是四旋翼无人机控制系统建模的基础&#xff0c;主要涉及到无人机的物理特性和运动学特性。物理建模的目的是将无人机的运动与输入信号&#xff08;如控制电压&#xff09;之间的关系进行数学描述。 四旋翼无人直升机是具有四个输入力和六个坐标输出的欠驱动动力学旋翼…...

程序员的金三银四求职宝典:如何在关键时期脱颖而出?

个人主页&#xff1a;17_Kevin-CSDN博客 随着春天的脚步渐近&#xff0c;程序员们的求职热潮也随之而来。在这个被称为“金三银四”的招聘季&#xff0c;如何从众多求职者中脱颖而出&#xff0c;成为了许多程序员关注的焦点。本文将为你提供一份全面的求职宝典&#xff0c;助你…...

分享经典、现代和前沿软件工程课程

随着信息技术的发展&#xff0c;软件已经深入到人类社会生产和生活的各个方面。软件工程是将工程化的方法运用到软件的开发、运行和维护之中&#xff0c;以达到提高软件质量&#xff0c;降低开发成本的目的。软件工程已经成为当今最活跃、最热门的学科之一。 本次软件工程MOOC课…...

网络工程师笔记3

IP地址类型 A类 255.0.0.0B类 255.255.0.0C类 255.255.255.0D类 E类 子网掩码&#xff1a;从左到右连续的确定网络位 2-4-8-16-32-64-128-256 128 &#xff1a; 1000 0000 64 &#xff1a; 0100 0000 32 &#xff1a; 0010 0000 16 &#xff1a; 0001 0000 8 &am…...

【菜鸟入门!】Matlab零基础快速入门教程

数学建模竞赛中&#xff0c;编程软件是必不可缺少的&#xff0c;比如大家都熟知的MATLAB多数同学们都会经常用到&#xff0c;今天给大家介绍一些MATLAB的基本元素&#xff0c;希望帮助大家更好的掌握编写基本的函数&#xff01; 变量和数组 MATLAB 程序的基本数据单元是数组。一…...

数据中心GPU集群高性能组网技术分析

数据中心GPU集群组网技术是指将多个GPU设备连接在一起&#xff0c;形成一个高性能计算的集群系统。通过集群组网技术&#xff0c;可以实现多个GPU设备之间的协同计算&#xff0c;提供更大规模的计算能力&#xff0c;适用于需要大规模并行计算的应用场景。 常用的组网技术&…...

go垃圾回收

1 go 垃圾回收变更 Go 语言的垃圾回收器&#xff08;GC&#xff09;自其诞生以来一直在不断演进和优化&#xff0c;以提高性能、减少暂停时间和对程序执行的影响。以下是一些关键的改进和变更点&#xff1a; 并发标记周期&#xff1a; Go 语言从一开始就采用了并发标记&#xf…...

如何做代币分析:以 LEO 币为例

作者&#xff1a; lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;LEO 代币仪表板 &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数…...

数制和码制

目录 几种常见的数制 数制 基数 位权 常见的四种数制 十进制数 二进制数 八进制数 十六进制数 不同进制数的相互转换 例如 例如 编码 二-十进制码 例如 格雷码 例如 原码、反码和补码 几种常见的数制 关键术语 数制&#xff1a;以一组固定的符号和统一的规则来表示数值…...

Git Bash中安装tree

文章目录 问题描述解决办法A备选办法BRef 问题描述 在Git Bash中使用tree报错&#xff1a; tree # bash: tree: command not found解决办法A 下载二进制文件&#xff1a; https://gnuwin32.sourceforge.net/packages/tree.htm -> 选binary。下载后解压.zip 把解压后的tre…...

java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...

C++练手题系列一

第 1 题 【 问答题 】 • 有多少种二叉树 输入n(1<n<13)&#xff0c;求n个结点的二叉树有多少种形态 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 整数n 输出答案 样例输入 3 样例输出 5 第 2 题 【 问答题 】 • 城堡问题 1 2 3 4 5 6 7 ################…...

(下)async/await高级用法,你会多少种呢?

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 前言 众所周知&#xff0c;在 ECMA17 中加入了两个关键字 async、await&#xff0c;简单来说它们是基于 Promise 之上的语法糖&#xff0c;可以让异步操作更加简洁明了。在掌握async、await的基础用法后&#xff0…...

阅读笔记 | REFORMER: THE EFFICIENT TRANSFORMER

阅读论文&#xff1a; Kitaev, Nikita, Łukasz Kaiser, and Anselm Levskaya. “Reformer: The efficient transformer.” arXiv preprint arXiv:2001.04451 (2020). 背景与动机 这篇论文发表较早&#xff0c;主要关注Transformer的效率问题。标准的Transformer模型在许多自然…...

光路科技:工业以太网交换机引领工业互联网新篇章

随着全球范围内工业4.0的浪潮不断涌动&#xff0c;工业互联网作为其核心驱动力&#xff0c;正引领着工业生产向智能化、网络化的崭新阶段迈进。在这一转型的浪潮中&#xff0c;光路科技凭借其卓越的工业互联设备与创新解决方案&#xff0c;正为工业互联网领域的发展注入新的活力…...

航拍无人机技术,航拍无人机方案详解,无人机摄影技术

航拍无人机是利用遥控技术和摄像设备&#xff0c;在空中进行拍摄和录像的无人机。这种无人机通常具有高清摄像设备、图像传输设备、GPS定位系统、智能控制系统等&#xff0c;可以轻松实现各种拍摄角度和高度&#xff0c;广泛应用于影视制作、旅游景区航拍、城市规划、环保监测等…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...