通过键盘对机械臂进行操作

1 #include<myhead.h>2 #include<linux/input.h>3 #define SER_PORT 88884 #define SER_IP "192.168.116.225"5 #define CLI_PORT 99996 #define CLI_IP "192.168.65.129"7 int main(int argc, const char *argv[])8 {9     //1、创建用于连接的客户端套接字10     int cfd = socket(AF_INET,SOCK_STREAM,0);11     if(cfd == -1)12     {13         perror("socket error");14         return -1;15     }16     printf("%d 客户端套接字创建成功\n",__LINE__);17     //设置端口号快速重用18     int reuse = 1;19     if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR|SO_REUSEPORT, &reuse, sizeof(reuse)) ==-1)20     {21         perror("setsockopt error");22         return -1;23     }24     printf("端口号快速重用成功\n");25     //2、绑定端口号和ip地址(非必须)                                                                                                                                                                                                                                                                           26     //2.1 填充客户端地址信息结构体27     struct sockaddr_in cin;28     cin.sin_family = AF_INET;29     cin.sin_port = htons(CLI_PORT);30     cin.sin_addr.s_addr = inet_addr(CLI_IP);31     //2.2 绑定端口号和IP32     if(bind(cfd,(struct sockaddr *)&cin,sizeof(cin))==-1)33     {34         perror("bind error\n");\35             return -1;36     }37     printf("%d bind success\n",__LINE__);38 39     //3、连接服务器40     //3.1 填充要连接服务器的地址信息结构体41     struct sockaddr_in sin;42     sin.sin_family = AF_INET;43     sin.sin_port = htons(SER_PORT);44     sin.sin_addr.s_addr = inet_addr(SER_IP);45     //3.2 连接服务器46     if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)47     {48         perror("connect error");49         return -1;50     }51     printf("%d 连接成功\n",__LINE__);52     //定义机械臂的容器53     unsigned char blue[5] = {0xff,0x02,0x01,0x00,0xff};54     char red[5] = {0xff,0x02,0x00,0x00,0xff};55 56     //将数据发送给服务器以初始化57     send(cfd,blue,sizeof(blue),0);58     sleep(1);59     send(cfd,red,sizeof(red),0);60     //定义一个读取数据的结构体变量61     //struct input_event ie;62     //int res = open("/dev/input/event1",O_RDONLY);63     //if(res == -1)64     /*{65       perror("open error\n");66       return -1;67       }68       */69     //收发数据70     char ctrl = 0;71     while(1)72     {73         ctrl=getchar();74         switch(ctrl)75         {76         case 'w':77             {78                 //红色臂角度增大w79                 red[3] += 5;80                 if(red[3]>=90)81                 {82                     red[3]==90;83                 }84                 send(cfd,red,sizeof(red),0);85             }86             break;87         case 's':88             {89                 //红色臂角度减小s90                 red[3] -= 5;91                 if(red[3]<=-90)92                 {93                     red[3]==-90;94                 }95                 send(cfd,red,sizeof(red),0);96             }97             break;98         case 'd':99             {
100                 //蓝色臂角度减小d
101                 blue[3] -= 5;
102                 if(blue[3]<=0)
103                 {
104                     blue[3]==0;
105                 }
106                 send(cfd,blue,sizeof(blue),0);
107             }
108             break;
109         case 'a':
110             {
111                 //蓝色臂角度增大a
112                 blue[3] += 5;
113                 if(blue[3]>=180)
114                 {
115                     blue[3]==180;
116                 }
117                 send(cfd,blue,sizeof(blue),0);
118             }
119             break;
120         case 'q':
121             goto END;
122         }
123     }
124 
125 END:
126     close(cfd);
127 
128     return 0;
129 
130 }

模拟面试总结:

什么是IP地址?

IP地址是主机在网络中的唯一标识(也是路由器选择的唯一标识),当主机从一个网络切换到另一个网络时,他会更改IP地址。

IP地址也分为IPv4和IPv6,IP地址一般由网络号和主机号组成。

IP地址和MAC地址的区别?

IP地址不一定是计算机的唯一标识,随着网络的切换,IP地址会发生更改,但是MAC地址不会发生更改。

MAC地址是计算机厂商给的唯一标识,全球唯一。

什么是端口号?

端口号是计算机用来区分同一主机上的多个进程而引入的,是一个两字节的无符号整数,也是网络通信中两个决定性因素之一。同时端口号分为三类:系统指定端口号,用户可用端口号,自动分配端口号。

TCP通信中的服务器实现流程?

通过socket创建一个套接字用于后续的通信,再通过bind函数来绑定服务器的IP地址和端口号并通过listen函数开启监听效果,之后通过accept函数实现与客户端的连接,后续便可以使用recv/send函数实现与客户端的数据交换过程,完成交换数据后可通过close函数关闭套接字。

TCP通信中的客户端实现流程 ?

通过socket创建一个套接字用于后续的通信,再通过bind函数来绑定客户端的IP地址和端口号并通过listen函数开启监听效果,之后通过connect函数实现与服务器的连接,后续便可以使用recv/send函数实现数据交换过程,完成交换数据后可通过close函数关闭套接字。

TCP和UDP的区别?

TCP ----> 稳定

1> 提供面向连接的,可靠的数据传输服务

2> 传输过程中,数据无误、数据无丢失、数据无失序、数据无重复

1、TCP会给每个数据包编上编号,该编号称之为序列号

2、每个序列号都需要应答包应答,如果没有应答,则会将上面的包重复发送直到正确为止

3> 数据传输效率低,耗费资源多

4> 数据收发是不同步的

1、为了提高效率,TCP会将多个较小,并且发送间隔短的数据包,沾成一个包发送,该现象称为沾包现象

2、该沾包算法称之为Nagle算法

5> TCP的使用场景:对传输质量比较高的以及传输大量数据的通信,在需要可靠通信的传输场合,一般使用TCP协议

例如:账户登录,大型文件下载的时候

UDP ----> 快速

1> 面向无连接的,不保证数据可靠的,尽最大努力传输的协议

2> 数据传输过程中,可能出现数据丢失、重复、失序现象

3> 数据传输效率高,实时性高

4> 限制每次传输的数据大小,多出部分直接忽略删除

5> 收发是同步的,不会沾包

6> 适用场景:发送小尺寸的,在接收到数据给出应答比较困难的情况下

例如:广播、通讯软件的音视频

TCP通信中的三次握手四次挥手?

UDP中是否可以使用connect函数进行连接?

1> udp通信中可以使用connect函数,他是将服务器与某个客户端建立一个唯一通道

2> 好处:传输效率高,稳定性高,数据干扰较小

3> 在服务器端使用connect与某个特定的客户端建立连接后,服务器就不再接收其他客户端的消息了

4> 如果想要断开,需要再使用一次connect函数,但是需要将地址信息结构体中的sin_addr改成AF_UNSPEC

5> 在udp中可以多次使用connect函数与其他客户端建立连接,但是在TCP中只能进行一次连接

6> 当UDP中使用了connect与某个特定的客户端建立连接后,就可以正常使用read/write、send/recv函数完成通信

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

3.4 bp,si,di寄存器,寻址方式,寄存器总结

汇编语言 1. [bxidata] 我们可以用[bx]来指明一个内存单元我们也可以用[bxidata]来表示一个内存单元&#xff0c;它的偏移地址为bx中的数值加上idata mount c d:masm c: debug r d 2000:1000 e 2000:1000 12 34 56 78 a mov ax,2000 mov ds,ax mov bx,1000 mov ax,[bx] mov c…

[嵌入式系统-40]:龙芯1B 开发学习套件 -10-PMON启动过程start.S详解

目录 一、龙芯向量表与启动程序的入口&#xff08;复位向量&#xff09; 1.1 复位向量&#xff1a; 1.2 代码执行流程 1.3 计算机的南桥 VS 北桥 二、PMON代码执行流程 三、Start.S详解 3.1 CPU初始化时所需要的宏定义 &#xff08;1&#xff09;与CPU相关的一些宏定义…

利用Python网络爬虫下载一本小说

目录 一、引言 二、准备工作 三、爬虫设计 四、案例实现 发送HTTP请求获取页面内容 解析HTML页面获取章节列表 循环爬取每个章节的内容 完整代码示例 五、注意事项与优化 六、总结 一、引言 随着网络技术的不断发展&#xff0c;网络爬虫已经成为了一种重要的数据获取…

JOSEF约瑟 TQ-100同期继电器 额定直流电压220V 交流电压100V±10V

TQ-100型同期继电器 TQ-100同期继电器 ​ l 应用 本继电器用于双端供电线路的自动重合闸和备用电源自投装置中&#xff0c;以检查线路电压与母线电压的 相位差和幅值差。 2 主要性能 2 1采用进口集成电路和元器件构成&#xff0c;具有原理先进、性能稳定、可靠性高、动作值精…

SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)

文章目录 1.整合MyBatis1.需求分析2.数据库表设计3.数据库环境配置1.新建maven项目2.pom.xml 引入依赖3.application.yml 配置数据源4.Application.java 编写启动类5.测试6.配置类切换druid数据源7.测试数据源是否成功切换 4.Mybatis基础配置1.编写映射表的bean2.MonsterMapper…

AI日报:戴尔首席执行官:我们可能在10年内需要100倍以上的数据中心

文章目录 数据中心的需要认知超能力的成本&#xff1a;接近零 数据中心的需要 戴尔创始人兼首席执行官迈克尔戴尔表示&#xff0c;随着对人工智能服务需求的增加&#xff0c;数据中心的容量可能必须在10年内从目前的水平增加100倍。 戴尔在SXSW 2024的炉边谈话中表示&#xff…

数据库表结构导出工具【人生的第一个开源工具】

数据库表结构导出工具 如今我努力奔跑&#xff0c;不过是为了追上那个曾经被寄予厚望的自己 —— 约翰。利文斯顿 本工具是一个用于将数据库表结构导出到 Word 文档的实用工具。它能够连接到指定的数据库&#xff0c;提取数据库中所有表的结构信息&#xff0c;并将这些信息以专…

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——B 题:基于多模态特征融合的图像文本检索完整思路与源代码分享

一、问题背景 随着近年来智能终端设备和多媒体社交网络平台的飞速发展&#xff0c;多媒体数据呈现海量增长 的趋势&#xff0c;使当今主流的社交网络平台充斥着海量的文本、图像等多模态媒体数据&#xff0c;也使得人 们对不同模态数据之间互相检索的需求不断增加。有效的信…

01_线性回归

线性回归 1 一元线性回归重要公式2 一元线性回归code实现3 sklearn实现一元线性回归4 多元线性回归公式5 sklearn实现多元线性回归6 模型评价指标7 多项式回归7.1将多项式回归作为线性回归处理7.2 sklaearn多项式特征维度扩展 1 一元线性回归重要公式 一元线性回归的均方误差&…

谁将主导未来AI市场?Claude3、Gemini、Sora与GPT-4的技术比拼

【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚…

微信开发者工具如何使用?使用注意事项

&#xff08;1&#xff09;单位如何进行换算&#xff1f; 1 px 750/屏幕宽度 rpx 1 rpx 屏幕宽度/750 px &#xff08;2&#xff09;如何新建文件&#xff1f; 1> 点开app.json 2> 在“pages/index/index”后面接“&#xff0c;pages/自定义文件夹名/自定义文件名”…

怎么在空闲时间用网络赚钱且收入不低于50?

何其有幸&#xff0c;我们生活在一个网络时代&#xff0c;买东西&#xff0c;生活缴费都可以通过网络来完成&#xff0c;给大家省下了大量的时间和精力&#xff0c;让生活更加便利。不仅如此&#xff0c;还可以通过网络来娱乐、交流&#xff0c;更可以通过它来赚钱。很多朋友上…

网络编程--高并发服务器

这里写目录标题 引入场景 多进程并发服务器二级目录二级目录二级目录 多线程并发服务器二级目录二级目录二级目录 多路IO转接服务器设计思路对比引入 select函数简介参数介绍第一个参数第234参数返回值对于第234参数的应用对于最后一个参数总结 epoll进阶二级目录二级目录二级目…

跳绳计数,YOLOV8POSE

跳绳计数&#xff0c;YOLOV8POSE 通过计算腰部跟最初位置的上下波动&#xff0c;计算跳绳的次数

栈和队列(Java实现)

栈和队列&#xff08;Java实现&#xff09; 栈 栈(Stack)&#xff1a;栈是先进后出&#xff08;FILO, First In Last Out&#xff09;的数据结构。Java中实现栈有以下两种方式&#xff1a; stack类LinkedList实现&#xff08;继承了Deque接口&#xff09; &#xff08;1&am…

【C语言入门】浮点型数据在内存中的存储

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C语言 个人主页&#xff1a;Celias blog~ 目录 ​编辑 引言 引例 一、浮点型在内存中的存储方式 1.1 …

Linux 时间系统调用

UNIX及LinuxQ的时间系统是由「新纪元时间」Epoch开始计算起。Epoch是指定为1970年1月1日凌晨零点零分零秒&#xff0c;格林威治时间。目前大部份的UNX系统都是用32位来记录时间&#xff0c;正值表示为1970以后&#xff0c;负值则表示1970年以前。 对于当前时间到Epoch 我们用两…

2024蓝桥杯每日一题(DFS)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶牛选美 试题二&#xff1a;树的重心 试题三&#xff1a;大臣的差旅费 试题四&#xff1a;扫雷 试题一&#xff1a;奶牛选美 【题目描述】 听说最近两斑点的奶牛最受欢迎&#xff0c;…

后端系统开发之——创建SpringBoot工程

原文地址&#xff1a;后端框架系统开发之——创建SpringBoot工程 - Pleasure的博客 下面是正文内容&#xff1a; 前言 现在的市场环境&#xff0c;如果你单单只是作为前端工程师或者是后端工程师&#xff0c;在开发Web应用的时候都需要去读取企业提供的接口文档。而当你前后端…

没想到打脸这么快,AI程序员已经出发了!

大家好啊&#xff0c;我是豆小匠。 先介绍一下本期的主角&#xff1a;Devin&#xff0c;世界上第一位AI程序员&#xff0c;由2023年11月成立的10人初创公司Cognition AI开发。 1. AI程序员已经能做到什么程度 3月13日&#xff0c;Cognition AI公司在X平台&#xff08;原推特&…