2024/03/01

控制机械臂

#include<myhead.h>
#define SER_IP "192.168.126.2"
#define SER_PORT 8888#define CLI_IP "192.168.252.165"
#define CLI_PORT 9999int main(int argc, const char *argv[])
{int cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);struct sockaddr_in cin;cin.sin_family=AF_INET;cin.sin_port=htons(CLI_PORT);cin.sin_addr.s_addr=inet_addr(CLI_IP);if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){perror("bind error");return -1;}printf("connect success\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(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}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);fflush;switch(key){case'W':case'w':{rbuf[3]+=2;if(rbuf[3]>=90){rbuf[3]=90;}send(cfd,rbuf,sizeof(rbuf),0);}break;case's':case'S':{rbuf[3]=rbuf[3]-2;if(rbuf[3]<=-90){rbuf[3]=90;}send(cfd,rbuf,sizeof(rbuf),0);}break;case'd':case'D':{bbuf[3]+=2;if(bbuf[3]>=180){bbuf[3]=180;}send(cfd,bbuf,sizeof(bbuf),0);}break;case'a':case'A':{bbuf[3]=bbuf[3]-2;if(bbuf[3]>=180){bbuf[3]=0;}}break;}}close(cfd);return 0;
}

tftp

#include <myhead.h>
#define IP "192.168.126.2"
#define PORT 69//定义下载函数
int do_download(int sfd,struct sockaddr_in sin)
{char pack[516]=""; //组件协议包:下载请求short *p1=pack;*p1=htons(1);    //设置操作码char *p2=pack+2;char filename[40]="";printf("请输入要下载的文件名>>>");fgets(filename,sizeof(filename),stdin);filename[strlen(filename)-1]=0;strcpy(p2,filename);char *p4=p2+strlen(p2)+1;strcpy(p4,"octet");       //模式位int packlen=4+strlen(p2)+strlen(p4);   //请求包的大小//向服务器发送请求包if(sendto(sfd,pack,packlen,0,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("sendto error");return -1;}printf("请求成功\n");//收取服务器发来的数据包char rbuf[516]="";short *r1=rbuf;//创建一个文件int fd=-1;if((fd=open(filename,O_RDWR|O_CREAT|O_TRUNC,0664))==-1){perror("open error");return -1;}printf("fd=%d\n",fd);socklen_t socklen=sizeof(sin);while(1){//	printf("111\n");bzero(rbuf,sizeof(rbuf));int res=recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,&socklen);if(*r1==ntohs(3)){if(write(fd,rbuf+4,res-4)<0){perror("write error");break;}*r1=htons(4);if(sendto(sfd,rbuf,4,0,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("sendto error");return -1;}if(res<516){printf("下载完毕\n");break;}else if(rbuf[1]==5){printf("download error:%s\n",rbuf+4);}}}close(fd);return 0;//如果为512,则读取后,回复一个应打包,继续接收下一个//如果小于512,则读取数据后,回复一个应打包,结束接收数据	}//定义上传函数
int do_upload(int sfd,struct sockaddr_in sin)
{char pack[516]=""; //组件协议包:上传请求short *p1=pack;*p1=htons(2);    //设置操作码char *p2=pack+2;char filename[40]="";printf("请输入要上传的文件名>>>");fgets(filename,sizeof(filename),stdin);filename[strlen(filename)-1]=0;strcpy(p2,filename);char *p4=p2+strlen(p2)+1;strcpy(p4,"octet");       //模式位int packlen=4+strlen(p2)+strlen(p4);   //请求包的大小//向服务器发送请求包if(sendto(sfd,pack,packlen,0,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("sendto error");return -1;}printf("请求成功\n");//从linux系统中读取文件,然后发送给服务器//以只读的形式打开上传的文件int fd1=-1;if((fd1=open(filename,O_RDWR))==-1){perror("open error");return -1;}printf("fd1=%d\n",fd1);socklen_t socklen=sizeof(sin);//用来读取文件的容器char rbuf[516]="";short *r1=rbuf;      //操作码short *r2=rbuf+2;    //块编号int i=1;int len=0;         //读取文件的大小while(1){bzero(rbuf,sizeof(rbuf));int res=recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,&socklen);if(*r1==ntohs(4)){bzero(rbuf,sizeof(rbuf));len=read(fd1,rbuf+4,512);	*r2=htons(i);    //给块编号赋值//把读取文件的内容发送给服务器*r1=htons(3);   //给操作码赋值if(sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,socklen)==-1){perror("sendto error");return -1;}i++;if(len<512){printf("上传完毕\n");break;}else if(rbuf[1]==5){printf("upload error:%s\n",rbuf+4);}}}close(fd1);return 0;}int main(int argc, const char *argv[])
{int sfd=-1;if((sfd=socket(AF_INET,SOCK_DGRAM,0))==-1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);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 menu=0;while(1){	system("clear");printf("****************\n");printf("*****1.下载*****\n");printf("*****2.上传*****\n");printf("*****3.退出*****\n");printf("****************\n");printf("请输入选项:");scanf("%d",&menu);getchar();//对菜单多分支选择switch(menu){case 1:{//下载功能do_download(sfd,sin);}break;case 2:{//上传功能do_upload(sfd,sin);}break;case 3:goto END;break;default:printf("输入错误,请重新输入\n");}printf("请输入任意键按回车结束\n");while(getchar()!='\n');}END:	close(sfd);return 0;
}

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

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

相关文章

成功解决git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af

成功解决git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af 问题描述解决方案 问题描述 用git的时候可能会遇到这个问题&#xff1a; (base) zhouzikang7443-8x4090-120:~/project$ git clone https://github.com/123/12…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果&#xff1a; 原来的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的&#xff0c;还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

【leetcode】圆圈中最后剩下的数字

目录 1. 问题 2. 思路 3. 代码 4. 运行 1. 问题 本题即为典型的约瑟夫问题&#xff0c;通过递推公式倒推出问题的解。原始问题是从n个人中每隔m个数踢出一个人&#xff0c;原始问题变成从n-1个人中每隔m个数踢出一个人…… 示例 1&#xff1a; 输入: n 5, m 3 输出: 3…

Unity TMP文字移动效果

前言 看见很多游戏有很特殊的波浪形文字效果&#xff0c;于是来尝试一下控制TMP文字顶点的方式达到类似效果。 原理 挂载tmp text&#xff0c;在里面随便放入非空格字符。 tmp text组件开放了textInfo接口&#xff0c;也就是GetComponent<TextMeshProUGUI>().textInfo…

两天学会微服务网关Gateway-Gateway简介

锋哥原创的微服务网关Gateway视频教程&#xff1a; Gateway微服务网关视频教程&#xff08;无废话版&#xff09;_哔哩哔哩_bilibiliGateway微服务网关视频教程&#xff08;无废话版&#xff09;共计17条视频&#xff0c;包括&#xff1a;1_Gateway简介、2_Gateway工作原理、3…

使用.NET开发VSTO工具快速将PPT导出为图片

本文主要介绍如何使用.NET开发 PowerPoint VSTO 外接程序&#xff0c;并实现快速的将当前页PPT导出为图片的功能。可以帮助你了解如何使用 VSTO 开发 Office 外接程序&#xff0c;以及如何操作 PowerPoint 的对象模型。 1. 背景 在日常的文章写作中&#xff0c;我经常使用 PPT…

Vue 3 中的 watchEffect 和 watch 有什么区别?

Vue 3 中的 watchEffect 和 watch 有什么区别&#xff1f; Vue 3 引入了 Composition API&#xff0c;为开发者提供了更加灵活和组织化的方式来组合和复用代码逻辑。在响应式系统中&#xff0c;watch 和 watchEffect 是两个重要的函数&#xff0c;用于观察和响应 Vue 组件中状…

JUC并发编程 深入学习Java并发编程【上】

JUC并发编程&#xff0c;深入学习Java并发编程&#xff0c;与视频每一P对应&#xff0c;全系列6w字。 P1-5 为什么学特色预备知识 进程线程概念 进程&#xff1a; 一个程序被运行&#xff0c;从磁盘加载这个程序的代码到内存&#xff0c;就开起了一个进程。 进程可以视为程…

JVM相关问题

JVM相关问题 一、Java继承时父子类的初始化顺序是怎样的&#xff1f;二、JVM类加载的双亲委派模型&#xff1f;三、JDK为什么要设计双亲委派模型&#xff0c;有什么好处&#xff1f;四、可以打破JVM双亲委派模型吗&#xff1f;如何打破JVM双亲委派模型&#xff1f;五、什么是内…

Spring Cloud Gateway-系统保护Sentinel集成

文章目录 Sentinel介绍Spring Cloud Gateway集成Sentinelpom依赖Sentinel配置Sentinel集成Nacos作为数据源自定义降级响应 Sentinel介绍 ​ 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&a…

HTML5:七天学会基础动画网页6

CSS3自定义字体 ①&#xff1a;首先需要下载所需字体 ②&#xff1a;把下载字体文件放入 font文件夹里&#xff0c;建议font文件夹与 css 和 image文件夹平级 ③&#xff1a;引入字体&#xff0c;可直接在html文件里用font-face引入字体&#xff0c;分别是字体名字和路径 例…

Django官网项目

项目准备 使用VSCODE做IDE。 检查Python版本。 sudo apt install sudo apt update python3 --version创建项目路径&#xff0c;创建虚拟环境&#xff0c;创建项目 路径 \mysite 进入路径&#xff0c;运行VSCODE 运行 "code ." 创建虚拟环境。 选择 >python: c…

【推荐算法系列十七】:GBDT+LR 排序算法

排序算法经典中的经典 参考 推荐系统之GBDTLR 极客时间 手把手带你搭建推荐系统 课程 逻辑回归&#xff08;LR&#xff09;模型 逻辑回归&#xff08;LR,Logistic Regression&#xff09;是一种传统机器学习分类模型&#xff0c;也是一种比较重要的非线性回归模型&#xff…

AAAI2024-分享若干篇有代码的优秀论文-图神经网络、时间序列预测、知识图谱、大模型等

图神经网络、大模型优化方向系列文章目录 为了方便大家根据自己的兴趣查看自己的研究方向论文&#xff0c;在这里进行了细分。如果有对其中的论文感兴趣的&#xff0c;可以查看对应的文章在论文相应的代码&#xff0c;方便快速上手学习&#xff0c;也可以借助这些代码的学习快…

16 Educational Codeforces Round 142 (Rated for Div. 2)C. Min Max Sort(递归、思维、dp)

C. Min Max Sort 很不错的一道题目&#xff0c;不过脑电波和出题人每对上&#xff0c; q w q 。 qwq。 qwq。 正难则反。 我们考虑最后一步是怎么操作的。 最后一步一定是对 1 1 1和 n n n进行操作 那么上一步呢&#xff1f; 上一步应该是对 2 2 2和 n − 1 n-1 n−1 以此类推…

AMD“高级洞察”系列揭示Epyc Naples和Rome原型CPU早期无法启动问题

AMD在其新的YouTube视频系列《高级洞察》第一集中&#xff0c;由AMD首席技术官Mark Papermaster担任主持人&#xff0c;讨论了AMD在数据中心领域的突破性进展及其持续增长。然而&#xff0c;AMD在服务器业务的发展并非一帆风顺&#xff0c;两位高管公开讨论了早期Epyc Naples和…

【Python】环境管理怎么选择【virtualenv】【pipenv】【 poetry】【 conda】

前言 刚入门Python&#xff0c;看到PyCharm的环境管理选择有好几个选择&#xff0c;分别是virtualenv、pipenv、venv、conda&#xff0c;只知道这些都可以用来管理Python环境的&#xff0c;但不知道这些环境有什么区别&#xff0c;所以&#xff0c;本文将对这些环境管理进行总…

Avalonia学习(二十九)-仪表

Avalonia制作仪表盘&#xff0c;把控件给大家演示一下&#xff0c;Avalonia有三类自定义控件&#xff0c;分别是用户控件、模版控件、自主控件。前面已经很多用户控件了&#xff0c;这个是演示模版控件&#xff0c;另外一种不知道哪种情况下使用。 前端代码&#xff1a; <…

想从事数据方向职场小白看过来, 数据方面的一些英文解释

想从事数据方向职场小白看过来&#xff0c;一些英文名词解释 文章目录 想从事数据方向职场小白看过来&#xff0c;一些英文名词解释 英文类解释NoSQL&#xff1a;ESB&#xff1a;ACID &#xff1a;Data Vault&#xff1a;MDM&#xff1a;OLAP&#xff1a;SCD:SBA&#xff1a;MP…

【Django】执行查询——比较、删除、复制、批量修改对象

以下述模型为基础&#xff0c;讨论检索对象的方式方法&#xff1a; from datetime import datefrom django.db import modelsclass Blog(models.Model):name models.CharField(max_length100)tagline models.TextField()def __str__(self):return self.nameclass Author(mod…