3.1作业

news2024/9/22 11:36:04

作业要求:

通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂

程序代码:

#include<myhead.h>
#define SER_IP "192.168.126.12"      //服务器ip
#define SER_PORT 8888                //服务器端口号

#define CLI_IP "192.168.244.140"      //客户端IP
#define CLI_PORT 9999                //客户端端口号

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);

	//2.绑定(非必须)
	//填充地址信息结构体
	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("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)
	{
		system("stty -icanon");
		key = getchar();
		
		//scanf("%c",&key);                //键盘输入一个字符
		//getchar();                     //吸收回车

		switch(key)
		{
			//操作红色臂角度增大,范围不大于90
		case 'w':case 'W':
			{
				rbuf[3]+=1;                //每次操作的角度偏移一度
				if(rbuf[3]>90)
				{
					rbuf[3] = 90;
				}
				send(cfd,rbuf,sizeof(rbuf),0);
			}
			break;
			//操作红色臂角度减小,范围不小于-90
		case 's':case 'S':
			{
				rbuf[3]-=1;                
				if(rbuf[3]<-90)
				{
					rbuf[3] = -90;
				}
				send(cfd,rbuf,sizeof(rbuf),0);
			}
			break;
			//操作蓝色臂角度增大,范围不大于180
		case 'd':case 'D':
			{
				bbuf[3]+=1;               			
				if(bbuf[3]>180)
				{
					bbuf[3] = 180;
				}
				send(cfd,bbuf,sizeof(bbuf),0);
			}
			break;
			//操作蓝色臂角度减小,范围不小于0
		case 'a':case 'A':
			{
				bbuf[3]-=1;              
				if(bbuf[3]<0)
				{
					bbuf[3] = 0;
				}
				send(cfd,bbuf,sizeof(bbuf),0);
			}
			break;
		}


	}
	//5.关闭套接字
	close(cfd);
	return 0;
}

运行结果:

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

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

相关文章

《C++ Primer Plus》《10、对象和类》

文章目录 前言&#xff1a;1 过程性编程和面向对象编程2 抽象和类2.1 类型是什么2.2 C中的类2.3 实现类成员函数2.4 使用类 3 类的构造函数和析构函数3.1 声明和定义构造函数3.2 使用构造函数3.3 默认构造函数3.4 析构函数 4 this指针5 对象数组6 类的作用域6.1 作用域为类的常…

云计算 2月20号 (认识操作系统)

1、认识操作系统 计算机系统的组成 知识点1&#xff1a;没有软件系统的计算机称之为"裸机" 知识点2&#xff1a;裸机提供基本的可计算性资源 知识点3&#xff1a;操作系统是最靠近硬件的软件层&#xff0c;负责管理和控制计算机硬件。 计算机硬件组成五大部件 运算器…

1美元持有ZKFair PFP-CyberArmy,潜在收益分析

3月2日&#xff0c;ZKFair PFP-CyberArmy 将在 Element 上正式开始Public Sale。

C++基于多设计模式下的同步异步日志系统day2

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容实现了日志代码设计的实…

防御保护课程笔记

内容安全 防病毒 过滤技术 密码学

移动互联网时代的APP上架流程和要点

摘要 本文将介绍移动应用程序上架的基本流程和要点&#xff0c;包括应用商店注册、APP材料准备、打包上传App、APP审核以及发布APP的详细步骤。此外&#xff0c;还会提到利用appuploder工具简化iOS应用上架步骤的方法&#xff0c; 引言 在移动互联网时代&#xff0c;开发一…

【笔记】深度学习入门:基于Python的理论与实现(六)

深度学习 深度学习是加深了层的深度神经网络 加深网络 本节我们将这些已经学过的技术汇总起来&#xff0c;创建一个深度网络&#xff0c;挑战 MNIST 数据集的手写数字识别 向更深的网络出发 基于33的小型滤波器的卷积层。激活函数是ReLU。全连接层的后面使用Dropout层。基…

Laravel框架: Call to a member function connect() on null 异常报错处理

Laravel框架&#xff1a; Call to a member function connect() on null 异常报错处理 Date: 2024.03.01 21:03:11 author: lijianzhan 原文链接: https://learnku.com/laravel/t/63721 问题&#xff1a; local.ERROR: Call to a member function connect() on null {"…

win安装卸载python3.13

一、安装 访问python官网&#xff1a;https://www.python.org/ 点击“Downloads” 点击“Windows” 找到自己要下载的版本和位数&#xff0c;比如我这个是3.13版本、64位的安装包 下载好了之后&#xff0c;双击安装包 勾选“Add python.exe to PATH”&#xff1a;把python环…

线程安全的集合容器

线程安全的集合容器 List集合中的线程安全的集合容器&#xff1a; 在旧版本中Vector是线程安全的集合容器&#xff0c;在JDK 1.5以后CopyOnWriteArrayList也是线程安全的集合容器&#xff0c;CopyOnWriteArrayList的数据结构是Object类型的数组。 CopyOnWriteArrayList是如何…

【问题记录】pip install遇到“No space left on device“

一、pip安装包的过程中出现以下问题 二、问题溯源 【1】刚开始以为是空间不足&#xff0c;后来 df -h 看了一下&#xff0c;pip安装目录下空间绝对足够&#xff01;明显不是空间不足的问题。 【2】后来查了一下&#xff0c;发现是home目录下的空间满了&#xff0c;pip安装时&…

华为 OD 一面算法原题

2.2 亿彩票公布调查结果 昨天&#xff0c;闹得沸沸扬扬的《10 万中 2.2 亿》的彩票事件&#xff0c;迎来了官方公告。 简单来说&#xff0c;调查结果就是&#xff1a;一切正常&#xff0c;合规合法。 关于福利彩票事件&#xff0c;之前的推文我们已经分析过。 甚至在后面出现《…

车辆管理系统:一套系统掌握车辆的运营、维护和使用情况

hello&#xff0c;我是贝格前端工场&#xff0c;直接给大家介绍了各类通用的B端管理系统&#xff0c;收到了大家的欢迎。本次开始介绍针对具体行业的管理系统该如何设计和开发&#xff0c;欢迎大家持续关注、点赞&#xff0c;如有系统定制需求可以私信我们。 一、什么是车辆管理…

Muduo库核心代码及优秀编程细节剖析

一、前言&#xff1a; Muduo库是陈硕个人开发的Tcp网络编程库&#xff0c;支持Reactor模型。这篇博文对Muduo库中的Multi-reactor架构代码进行逻辑梳理&#xff0c;同时认真剖析了作者每一处精妙的代码设计思想。 目前我只重构并剖析了Muduo库中的核心部分&#xff0c;即Mult…

Qt应用软件【测试篇】cppchecker静态代码检查

文章目录 cppcheker简介下载地址与安装检查项目QT Creator使用CPP Cheker开启检查常见错误总结错误信息说明cppcheker简介 Cppcheck 是一个用于 C/C++ 代码的分析工具。它提供独特的代码分析以检测错误,并专注于检测未定义的行为和危险的编码结构。其目标是仅检测代码中的真实…

【Ai生态开发】Spring AI上架,打造专属业务大模型,AI开发再也不是难事!

大家好 这里是苏泽 后端是工作 ai是兴趣 对于ai的产生我的立场是拥抱ai的 是希望拿他作为提升能力的工具 那么这一篇带大家来学习如何使用ai打造一个专属的业务大模型 需求 就是说假设现在有一个 商城系统 里面有查询订单的api和获取商品购买方式的api 用户只需要输入 “…

ICCV2023:FLatten Transformer: Vision Transformer using Focused Linear Attention

文章目录 摘要引言PreliminaryVision Transformer and Self-AttentionLinear Attention Focused Linear Attention1.Focus ability2.Feature diversity3. Focused linear attention module 实验推理时间 总结 摘要 self-attention 的二次计算复杂度一直是将Transform模型应用于…

打印100-200之间的素数

#include <stdio.h>int prime(int n){int i 1;for(i 2;i < n;i){if(n % i 0)return 0;}return 1; } //打印100-200之间的素数 int main() {int n 0;int j 100;for(j 100;j < 200;j){if(prime(j)){printf("%d是素数\n",j);n;}}printf("100-200…

在此处打开命令窗口 (Open command window here)

在此处打开命令窗口 [Open command window here] 1. 在此处打开命令窗口 (Open command window here)2. .exe 执行References 1. 在此处打开命令窗口 (Open command window here) Shift 鼠标右键 2. .exe 执行 ​​​ 在 .exe 文件所在的文件夹打开命令提示符窗口。如果使用…

【算法】二叉搜索树的插入、删除、转换操作

1 二叉搜索树的插入操作 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c;可能…