网络编程day3

1.思维导图

2.TCP机械臂测试

通过:w(红色臂角度增大)

           s(红色臂角度减小)

           d(蓝色臂角度增大)

            a(蓝色臂角度减小)

按键控制机械臂

注意:关闭计算机的杀毒软件,电脑管家,防火墙

1)基于TCP服务器的机械臂,端口号是8888,IP是Windows的IP;

查看Windows的IP:按住Windows+r键,输入cmd,输入ipconfig

2)点击软件中的开启监听;

3)机械臂需要发送16进制数,共5个字节,协议如下

        0xff        0x02        x        y        0xff

        0xff:起始结束协议,固定的

        0x02:控制机械手臂协议,固定的

        x:指定要操作的机械臂

                0x00:红色摆臂

                0x01:蓝色摆臂

        y:指定角度

tcpCli.c

#include<myhead.h>
#define SER_IP "192.168.125.162"  //服务器IP
#define SER_PORT 7777    //服务器端口#define CLI_IP "192.168.159.144"     //客户端IP
#define CLI_PORT 9999     //客户端端口号int main(int argc, const char *argv[])
{//1.创建用于通信的套接字文件描述符int cfd=-1;cfd=socket(AF_INET,SOCK_STREAM,0);//参数1:表示使用的是IPv4的通信协议//参数2:表示使用tcp通信类型//参数3:表示前面已经特定了通信协议if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//2.绑定(非必须)//2.1填充地址信息结构体struct sockaddr_in cin;cin.sin_family=AF_INET;cin.sin_port=htons(CLI_PORT);cin.sin_addr.s_addr=inet_addr(CLI_IP);//2.2绑定if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){perror("bind error");return -1;}printf("bind success\n");//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);   //键盘输入一个字符getchar();         //吸收回车switch(key){case 'W':case 'w':{rbuf[3]+=5;      //每次操作的角度偏移5度if(rbuf[3]>=90){rbuf[3]=90;}send(cfd,rbuf,sizeof(rbuf),0);}break;case 'S':case 's':{rbuf[3]-=5;      //每次操作的角度偏移5度if(rbuf[3]<=-90){rbuf[3]=-90;}send(cfd,rbuf,sizeof(rbuf),0);}break;case 'D':case 'd':{bbuf[3]+=5;      //每次操作的角度偏移5度if(bbuf[3]>=180){bbuf[3]=180;}send(cfd,bbuf,sizeof(bbuf),0);}break;case 'A':case 'a':{bbuf[3]-=5;      //每次操作的角度偏移5度if(bbuf[3]<=0){bbuf[3]=0;}send(cfd,bbuf,sizeof(bbuf),0);}break;}}//6.关闭套接字close(cfd);return 0;
}

3.基于UDP的TFTP文件传输

1)TFTP协议概述

简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输

特点:是应用层协议

           基于UDP协议实现

数据传输模式:octet:二进制模式

                         mail:已经不再支持

2)TFTP下载模型

TFTP通信过程总结:

1.服务器在69端口等待客户端的请求

2.服务器若批准此请求,则使用临时端口与客户端进行通信

3.每个数据包的编号都有变化(从1开始)

4.每个数据包都要得到ACK的确认,如果出现超时则需要重新发送最后的数据包或ACK包

5.数据长度以512Byte传输的,小于512Byte的数据意味着数据传输结束

3)TFTP协议分析

#include<myhead.h>
#define SER_IP "192.168.125.162"
#define SER_PORT 69
int communication();
int file_upload();
int file_download();
int main(int argc, const char *argv[])
{int menu=0;while(1){system("clear");   //执行终端指令printf("\t\t=====TFTP菜单界面=====\n");printf("\t\t=====1.下载===========\n");printf("\t\t=====2.上传===========\n");printf("\t\t=====0.退出===========\n");printf("请输入选项:");scanf("%d",&menu);getchar();//对菜单多分支选择switch(menu){case 1:{//下载file_download();}break;case 2:{//上传file_upload();}break;case 0:goto END;default:printf("您输入的功能有误,请重新输入\n");}while(getchar()!='\n');system("clear");}END:return 0;
}//创建用于通信的套接字函数
int communication()
{int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd==-1){perror("socket error");return -1;}return sfd;
}//定义上传函数
int file_upload()
{int sfd=communication();system("ls");     //在终端显示当前目录下所有文件printf("请输入你要上传的文件:");char file[128];scanf("%s",file);//以只读的形式打开需要上传的文件的数据int sendfd=-1;if((sendfd=open(file,O_RDONLY))==-1){perror("open file error");return -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);socklen_t socklen=sizeof(sin);//封装请求下载的数据包//第一模块char pack[516]="";short *p1=(short *)pack;*p1=htons(2);     //第二模块char *p2=pack+1;strcpy(p2,file);//第三模块int broadcst_permission=1;char *p3=p2+strlen(p2)+1;strcpy(p3,"octet");int len=4+strlen(p2)+strlen(p3);sendto(sfd,pack,len,0,(struct sockaddr*)&sin,sizeof(sin));char *data_point=pack+4;short *menu_point=(short *)pack;*menu_point=htons(3);short *block_point=(short *)(pack+2);*block_point=htons(1);int i=1;while(1){recvfrom(sfd,pack,sizeof(pack),0,(struct sockaddr*)&sin,&socklen);if(*menu_point==htons(4)){int res=read(sendfd,pack+4,512);if(res==0){printf("拷贝完成,按任意按键退出\n");break;}*menu_point=htons(3);sendto(sfd,pack,res+4,0,(struct sockaddr*)&sin,socklen);}}
}
//定义下载函数
int file_download()
{//创建文件描述符用于下载传输过来的数据包int wfd=-1;if((wfd=open("./test.txt",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1){perror("open error");return -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);socklen_t socklen=sizeof(sin);int sfd=-1;if((sfd=communication())==-1){printf("连接失败\n");return -1;}//封装请求下载的数据包//第一模块char pack[516]="";short *p1=(short *)pack;*p1=htons(1);//第二模块printf("请输入你要下载的文件:");char file[128];scanf("%s",file);char *p2=pack+2;strcpy(p2,file);//第三模块char *p3=p2+strlen(p2)+1;strcpy(p3,"octet");int len=4+strlen(p2)+strlen(p3);sendto(sfd,pack,len,0,(struct sockaddr*)&sin,sizeof(sin));while(1){int res=0;if((res=recvfrom(sfd,pack,sizeof(pack),0,(struct sockaddr*)&sin,&socklen))<0){perror("recvfrom error");return -1;}char *data_point=pack+4;short *menu_point=(short*)pack;short *block_point=(short*)(pack+2);if(res<516){write(wfd,data_point,res-4);printf("文件拷贝完成\n");break;}write(wfd,data_point,512);//完成了一次拷贝,要向客户端发送ACK包char ack[4];short *p1=(short *)ack;short *p2=(short *)(ack+2);*p1=htons(4);*p2=*block_point;sendto(sfd,ack,4,0,(struct sockaddr*)&sin,sizeof(sin));}}

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

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

相关文章

MySQL之索引详解

华子目录 索引概述优缺点 索引的原理索引的设计原则索引结构B-tree&#xff08;多路平衡查找树&#xff09;BtreeHash 为什么InnoDB存储引擎选择Btree&#xff1f;索引分类聚集索引选取规则 单列索引和多列索引前缀索引创建索引1.创建表时创建索引2.在已经存在的表上创建索引3.…

剑指offer刷题记录Day2 07.数组中重复的数字 ---> 11.旋转数组的最小数字

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、重建二叉树①代码实现&#xff08;带注释&am…

YOLOv9有效改进|使用动态蛇形卷积Dynamic Snake Convolution

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 使用ICCV2023中的动态蛇形卷积替换YOLOv9网络中的Conv模块。 二、Dynamic Snake Convolution模块详解 2.1 模块简介 应用场景&#x…

【Micropython基础】TCP客户端与服务器

文章目录 前言一、连接Wifi1.1 创建STA接口1.2 激活wifi接口1.3 连接WIFI1.4 判断WIFI是否连接1.5 连接WIFI总体代码 二、创建TCP 客户端2.1 创建套接字2.2 设置TCP服务器的ip地址和端口2.3 连接TCP服务器2.3 发送数据2.4 接收数据2.5 断开连接2.6 示例代码 三、TCP服务器的创建…

JVM运行时数据区——运行时数据区及线程概述

文章目录 1、运行时数据区概述2、线程3、小结 内存是非常重要的系统资源&#xff0c;是硬盘和CPU的中间仓库及桥梁&#xff0c;承载着操作系统和应用程序的实时运行。JVM在程序执行期间把它所管理的内存分为若干个不同的数据区域。这些不同的数据区域可以分为两种类型&#xff…

Topaz Gigapixel AI:让每一张照片都焕发新生mac/win版

Topaz Gigapixel AI 是一款革命性的图像增强软件&#xff0c;它利用先进的人工智能技术&#xff0c;能够显著提升图像的分辨率和质量。无论是摄影爱好者还是专业摄影师&#xff0c;这款软件都能帮助他们将模糊的、低分辨率的照片转化为清晰、细腻的高分辨率图像。 Topaz Gigap…

【探索Linux】—— 强大的命令行工具 P.24(网络基础)

阅读导航 引言一、计算机网络背景1. 网络发展历史 二、认识 "协议"1. 网络协议概念2. 网络协议初识&#xff08;1&#xff09;协议分层&#xff08;2&#xff09;OSI参考模型&#xff08;Open Systems Interconnection Reference Model&#xff09;&#xff08;3&…

差分题练习(区间更新)

一、差分的特点和原理 对于一个数组a[]&#xff0c;差分数组diff[]的定义是: 对差分数组做前缀和可以还原为原数组: 利用差分数组可以实现快速的区间修改&#xff0c;下面是将区间[l, r]都加上x的方法: diff[l] x; diff[r 1] - x;在修改完成后&#xff0c;需要做前缀和恢复…

智慧应急:构建全方位、立体化的安全保障网络

一、引言 在信息化、智能化快速发展的今天&#xff0c;传统的应急管理模式已难以满足现代社会对安全保障的需求。智慧应急作为一种全新的安全管理模式&#xff0c;旨在通过集成物联网、大数据、云计算、人工智能等先进技术&#xff0c;实现对应急事件的快速响应、精准决策和高…

【IDEA+通义灵码插件】实现属于你的大模型编程助手

目录 1.前言 2.下载安装 3.解释代码 4.生成单元测试 5.生成注释 6.智能补全 1.前言 大模型到底该以一种什么方式落地&#xff0c;从而嵌入我们的工作当中&#xff0c;助力我们工作效率的提升&#xff0c;其实最好的方式也许就是虚拟助手的方式&#xff0c;就像钢铁侠的&…

最新发布!2D激光雷达与相机数据融合的新方法

作者&#xff1a;小柠檬 | 编辑&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」获取论文 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D高斯&#xff0c;拉你入群。文末附行业细分群 原文&#xff1a;最新发布&#xff01;2D激光雷达与相…

【飞桨EasyDL】飞桨EasyDL发布的模型转换onnx(附工程代码)

一个愿意伫立在巨人肩膀上的农民...... 一、paddle转onnx转rknn环境搭建 paddle转onnx和onnx转rknn两个环境可以分开搭建&#xff0c;也可以搭建在一起。这里选择分开搭建&#xff0c;先搭建paddle转onnx。 1.1、创建环境 选择python3.8.13包进行创建环境 conda create --nam…

SQL 练习题目(入门级)

今天发现了一个练习SQL的网站--牛客网。里面题目挺多的&#xff0c;按照入门、简单、中等、困难进行了分类&#xff0c;可以直接在线输入SQL语句验证是否正确&#xff0c;并且提供了测试表的创建语句&#xff0c;也可以方便自己拓展练习&#xff0c;感觉还是很不错的一个网站&a…

项目实战:Qt监测操作系统物理网卡通断v1.1.0(支持windows、linux、国产麒麟系统)

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/136276999 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

Logic Pro:专业音乐制作软件,为你的音乐插上翅膀

Logic Pro是一款功能强大的音乐制作软件&#xff0c;专为专业音乐人和音乐爱好者设计。它提供了全面的音乐创作工具&#xff0c;包括音频录音、编辑、混音、合成以及自动化等功能&#xff0c;让你能够轻松实现音乐梦想。 Logic Pro软件获取 首先&#xff0c;Logic Pro拥有卓越…

使用 Azure 部署静态网页

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…

【airtest】自动化入门教程(一)AirtestIDE

目录 一、下载与安装 1、下载 2、安装 3、打开软件 二、web自动化配置 1、配置chrome浏览器 2、窗口勾选selenium window 三、新建项目&#xff08;web&#xff09; 1、新建一个Airtest项目 2、初始化代码 3、打开一个网页 四、恢复默认布局 五、新建项目&#xf…

[业务系统]人物坐骑系统介绍I

1.问题描述 旧版本的坐骑系统依赖于人物装备了【法宝】&#xff08;一种装备类型&#xff09;&#xff0c;装备了法宝的人物变拥有了【幻化】坐骑的能力&#xff0c;即在人物装备栏中的【外观】中会有已经幻化和未幻化&#xff08;解锁&#xff09;的坐骑。如果玩家至少幻化一…

基于R语言的分位数回归技术应用

回归是科研中最常见的统计学研究方法之一&#xff0c;在研究变量间关系方面有着极其广泛的应用。由于其基本假设的限制&#xff0c;包括线性回归及广义线性回归在内的各种常见的回归方法都有三个重大缺陷&#xff1a;(1)对于异常值非常敏感&#xff0c;极少量的异常值可能导致结…

(全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF

研究生英语读写教程基础级教师用书PDF 研究生英语读写教程提高级教师用书PDF pdf下载&#xff08;完整版下载&#xff09; &#xff08;1&#xff09;研究生英语读写教程基础级教师用书PDF &#xff08;2&#xff09;研究生英语读写教程基提高级教师用书PDF