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

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://www.mzph.cn/news/751756.shtml

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

相关文章

28.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据推测结果用提示框的形式显示

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;27.数据推测功能…

便利店小程序有哪些功能

​便利店小程序为附近的住户提供小程序在线购物的服务。用户只需要打开小程序&#xff0c;就可以购买需要的商品&#xff0c;可以选择自取或者配送。整个过程非常简单快速。下面具体介绍便利店小程序的功能。 1. **商品展示**&#xff1a;展示便利店的商品信息&#xff0c;包括…

贪心算法题解

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这篇文章将给大家介绍贪心算法和贪心算法题目的练习和解析&#xff0c;贪心算法的本质就是每一个阶段都是局部最优&#xff0c;从而实现全局最优。我们在做题的同时&#xff0c;不仅要把题目做出来&#xff0c;还要有严格的证…

9 个顶级免费视频压缩软件精选

视频有多种格式、不同的大小和不同的压缩级别。但是&#xff0c;您可以使用最好的视频压缩器来&#xff1a; 减小文件大小提高压缩质量更好地服务您的观众 我们将列出九个领先的视频压缩软件精选&#xff0c;您今天可以免费使用它们来增强您的视频。 9 个顶级免费视频压缩器精…

【黑马程序员】Python综合案例

文章目录 数据分析案例目的需求数据准备实践数据记录类 文件解析解析csv格式解析json文件 进行数据计算读取文件数据按日期累加数据 图表展示图标绘制最终效果展示 数据分析案例 目的 文件操作实践json库使用三方库pyecharts使用面向对象实践数据容器使用 需求 给定一个csv…

设计模式之外观模式(Facade Pattern)【结构性模式】

为什么用结构性模式&#xff1f; 结构性模式关注点“怎样组合对象/类&#xff1f;”所以我们关注下类的组合关系类结构型模式关心类的组合&#xff0c;由多个类可以组合成一个更大的&#xff08;继承&#xff09;对象结构型模式关心类与对象的组合&#xff0c;通过关联关系在一…

Hadoop大数据应用:HDFS 集群节点缩容

目录 一、实验 1.环境 2.HDFS 集群节点缩容 二、问题 1.数据迁移有哪些状态 2.数据迁移失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xff08;已部署&#xff09; SecondaryNameNode &#xff08;已部署…

异常随笔xx1

关于过滤器和拦截器 看一下过滤器&#xff0c;过滤器我们可以分两步&#xff1a; 1.配置自定义过滤器 2.过滤器注册 这样它才会生效&#xff0c;拦截器也如此 先配置&#xff1a; RequiredArgsConstructor public class UserTransmitFilter implements Filter {private f…

裁员潮下,打工人的自我修养

法律规定的 裁员补偿&#xff1a; 1、平等协商解除的&#xff0c;底线是N1&#xff0c;上限能谈多少法律都支持 2、有客观原因解除的&#xff0c;是N1 3、强制违法辞退的&#xff0c;是2N Tips&#xff1a;基数是每月的全额税前工资&#xff0c;包括奖金绩效等&#xff0c…

strstr的模拟实现

一&#xff1a;strstr函数的定义&#xff1a; strstr函数功能的解释&#xff1a; 在一个字符串里面寻找另一个字符串的首次出现位置&#xff0c;返回值为该位置。 strstr函数要点&#xff1a; 1&#xff0c;如果 str2 是 str1 的一部分&#xff0c;它返回一个指向 str1 中 …

2024.3.15

1.单向循环链表 代码&#xff1a; #include"loop.h" //创建单向循环链表 loop_p create_loop_list() {loop_p H (loop_p)malloc(sizeof(loop));if(HNULL){printf("空间申请失败\n");return NULL;}H->len0;H->nextH;return H; } //创建节点 loop_p…

【C语言】打印用*组成的X形图案

代码如下&#xff1a; #include<stdio.h> int main() { int n 0; int i 0; int j 0; while (scanf("%d", &n) ! EOF) for (i 0; i < n; i) { for (j 0; j < n; j) { if (…

拼多多根据关键词取商品列表 API 返回值说明

一、应用场景 拼多多根据关键词取商品列表的API应用场景非常广泛&#xff0c;主要集中在电商领域&#xff0c;包括但不限于以下几个方面&#xff1a; 1、商品搜索与推荐&#xff1a;商家可以通过API接口&#xff0c;根据用户输入的关键词&#xff0c;实时获取拼多多平台上的相…

什么是布隆过滤器?

1、什么是布隆过滤器 ​ 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多&#xff0c;缺…

Java习题中 哈希表的理论 有效的字母异位词 快乐数 两数之和

关于 哈希表的理论 今天最大的疑惑好像就是map的复杂度怎么算哈哈,一般n个元素map的复杂度就是On哦,不需要想得太复杂了,冲突的空间并不会造成一个量级,改变n前面的常数不会影响空间复杂度哈提醒&#xff01;熟悉好map,set的API哦 关于 有效的字母异位词 为什么遍历第二个字符…

小白必看的Python基础之函数篇

函数最重要的目的是方便我们重复使用相同的一段程序。 将一些操作隶属于一个函数&#xff0c;以后你想实现相同的操作的时候&#xff0c;只用调用函数名就可以&#xff0c;而不需要重复敲所有的语句。 函数的定义 首先&#xff0c;我们要定义一个函数, 以说明这个函数的功能…

BufferedOutputStream类讲解

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java IO相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

代码学习记录21--回溯算法第二天

随想录日记part21 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.16 主要内容&#xff1a;今天主要是结合类型的题目加深对回溯算法的理解&#xff1a;1&#xff1a;组合总和&#xff1b;2&#xff1a;电话号码的字母组合 216.组合总和III17.电话号码的字母…

【Redis知识点总结】(五)——Redis实现分布式锁

Redis知识点总结&#xff08;五&#xff09;——Redis实现分布式锁 setnxsetnx expiresetnx expire lua脚本set nx exset nx ex 随机值set nx ex 随机值 lua脚本set ex nx 随机值 lua脚本 锁续期RedissonRedLock 在Redis的众多应用场景中&#xff0c;分布式锁是Redis比…

解决分布式事务,Seata真香!

年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验等…