【网络编程】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:指定角度

核心代码
#include<myhead.h>
#define SER_PORT 8888 //与服务器一致
#define SER_IP "192.168.0.134" //服务器ip地址
#define CLI_PORT 8888//客户端端口号
#define CLI_IP "192.168.119.128"//客户端ip地址
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);//1.2端口快速重用int opt = 1;setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));int fd = open("/dev/input/event1",O_RDONLY);if(fd == -1){perror("open error");return -1;}struct input_event ie;//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连接到fwqif(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("连接服务器成功\n");//4.数据收发char rbuf[5] = {0xff,0x02,0x00,0x00,0xff};unsigned char bbuf[5] = {0xff,0x02,0x01,0x00,0xff};char key = 0;//发送初始化命令send(cfd,rbuf,sizeof(rbuf),0);sleep(1);send(cfd,bbuf,sizeof(bbuf),0);//发送数据while(1){read(fd,&ie,sizeof(ie));//读取键盘输入switch (ie.code*ie.value){//w机械臂红色角度增加case 17:rbuf[3] += 3;if(rbuf[3] > 90){rbuf[3] = 90;}send(cfd,rbuf,sizeof(rbuf),0);break;//s机械臂红色角度减少case 31:rbuf[3] -= 3;if(rbuf[3] < -90){rbuf[3] = -90;}send(cfd,rbuf,sizeof(rbuf),0);break;//d机械臂蓝色角度增加case 32:bbuf[3] += 3;if(bbuf[3] > 180){bbuf[3] = 180;}send(cfd,bbuf,sizeof(bbuf),0);break;//a机械臂蓝色角度减少case 30: bbuf[3] -= 3;if(bbuf[3] < 0){bbuf[3] = 0;}send(cfd,bbuf,sizeof(bbuf),0);break;default:break;}}//5.关闭套接字close(cfd);return 0;
}
演示视频
机械臂演示视频
相关文章:
【网络编程】TCP机械臂测试
通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂 注意:关闭计算机的杀毒软件,电脑管家,防火墙 1)基于TCP服务器…...
笔记:在WPF中如何注册控件级全局事件和应用程序级全局事件
一、目的:在WPF中如何注册控件级全局事件和应用程序级全局事件 二、实现 应用程序级全局事件 //注册应用程序级全局事件 EventManager.RegisterClassHandler(typeof(Button), Button.ClickEvent, new RoutedEventHandler(ic_event_Click)); 如上代码既会注册全局…...
【Linux系列】telnet使用入门
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
音视频相关知识
H.264编码格式 音频 PCM就是要把声音从模拟信号转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样。 pcm是无损音频音频文件格式...
数据结构--第七天
递归 -递归的概念 递归其实就是一种解决问题的办法,在C语言中:递归就是函数自己调用自己 -递归的思想 递归的思考方式就是把大事化小的过程 递归的递就是递推的意思,归就是回归的意思 (递归是少量的代码完成大量的运算)…...
代码随想录Day34:62.不同路径、63.不同路径II、343.整数拆分、96.不同的二叉搜索树
62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…...
【信息学奥赛一本通】1008:计算(a+b)/c的值
1008:计算(ab)/c的值 时间限制: 1000 ms 内存限制: 66536 KB 提交数:164836 通过数: 142434 【题目描述】 给定3个整数a、b、c,计算表达式abc的值。 【输入】 输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。(-10,…...
使用 jstat 进行 Java 应用程序性能监控
jstat 使用经验笔记 1. 简介 jstat 是 Java 开发工具包 (JDK) 中的一个命令行工具,用于监控 Java 虚拟机 (JVM) 的运行时状态,特别是垃圾回收 (Garbage Collection, GC) 的行为。通过使用 jstat,你可以监控和诊断 Java 应用程序的内存使用情…...
Prompt指令调优大揭秘
Hey,技术达人们!今天咱们就来聊聊Prompt指令调优的那些事儿。想象一下,你有一个超级智能的AI小伙伴,但要让它更懂你,更给力,那就得靠点“魔法”——Prompt指令调优。准备好了吗?让我们一探究竟&…...
C语言中的⽂件操作
1. 为什么使⽤⽂件? 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化…...
黑马前端——days14_js
案例 1 页面框架文件 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>&l…...
【自动驾驶】ROS中参数服务器通信(c++)
目录 通信过程新建参数服务器包编写测试文件修改cmakelist:搭配launch文件启动测试及结果 通信过程 1.Talker 设置参数 Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。 2.Listener 获取参数 Listener 通过 RPC 向…...
零基础5分钟上手亚马逊云科技核心云开发知识 - 网络基础
简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…...
Unity Recttransform操作
1、拉伸铺满 RectTransform rect GetComponent<RectTransform>();rect.anchorMin Vector2.zero;rect.anchorMax Vector2.one;rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width);rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Verti…...
MIT线性代数P5
置换矩阵 置换矩阵是行重新排列的单位矩阵。 置换矩阵用P表示, 性质: n阶置换矩阵共有n!个...
patroni+etcd开启SSL认证(三个节点证书一致 使用openssl命令)
瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:14 文档用途 本文主要介绍Patroni架构中如何开启etcd的ssl证书认证。 详细信息 一、前提说明 patroni版本:3.0.2 etcd版本&#x…...
Eureka入门指南:微服务注册与发现的基础概念
Eureka入门指南:微服务注册与发现的基础概念 引言 随着微服务架构的普及,微服务之间的高效通信和管理成为了开发和运维的核心挑战之一。为了解决服务发现和管理问题,Netflix推出了Eureka,一个功能强大的服务注册和发现工具。Eur…...
Linux:动态库和静态库
静态库与动态库 A:静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。 B:动态库(.so):程序在运行的时候才去链接动态库的代码&#…...
8.13网络编程
笔记 多点通信 一、套接字属性 套接字属性的获取和设置 #include <sys/types.h> /* See NOTES */#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level…...
蚂蚁AL1 15.6T 创新科技的新典范
● 哈希率:算力达到15.6T(相当于15600G),即每秒能够进行15.6万亿次哈希计算,在同类产品中算力较为出色,能提高WA掘效率。 ● 功耗:功耗为3510W,虽然数值看似不低,但结合其…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
【题解-洛谷】P10480 可达性统计
题目:P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M,接下来 M M M 行每行两个整数 x , y x,y x,y,表示从 …...
智警杯备赛--excel模块
数据透视与图表制作 创建步骤 创建 1.在Excel的插入或者数据标签页下找到数据透视表的按钮 2.将数据放进“请选择单元格区域“中,点击确定 这是最终结果,但是由于环境启不了,这里用的是自己的excel,真实的环境中的excel根据实训…...
PostgreSQL 对 IPv6 的支持情况
PostgreSQL 对 IPv6 的支持情况 PostgreSQL 全面支持 IPv6 网络协议,包括连接、存储和操作 IPv6 地址。以下是详细说明: 一、网络连接支持 1. 监听 IPv6 连接 在 postgresql.conf 中配置: listen_addresses 0.0.0.0,:: # 监听所有IPv4…...
前端异步编程全场景解读
前端异步编程是现代Web开发的核心,它解决了浏览器单线程执行带来的UI阻塞问题。以下从多个维度进行深度解析: 一、异步编程的核心概念 JavaScript的执行环境是单线程的,这意味着在同一时间只能执行一个任务。为了不阻塞主线程,J…...
【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数
【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数 文章目录 thttpd服务安装thttpd配置thttpd服务thttpd函数日志效果和文件附录:开发板快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互(RADX…...
