网络编程day03 20240813

一、相关练习

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

机械臂需要发送16进制数,共5个字节,协议如下:

0xff 0x02 x y 0xff 0xff:起始结束协议,固定的; 0x02:控制机械手臂协议,固定的; x:指定要操作的机械臂 0x00 红色摆臂 0x01 蓝色摆臂 y:指定角度

1> ctlRobotArm.c

cpp 复制代码
#include<myhead.h>

#define SER_PORT 8888             //与服务器保持一致
#define SER_IP  "192.168.0.139"    //服务器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);             
    
    //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("连接服务器成功\n");

    //准备数据
    char rbuf[5] = {0xff, 0x02, 0x00, 0x00, 0xff};
    char bbuf[5] = {0xff, 0x02, 0x01, 0x00, 0xff};

    //发送给服务器,以初始化机械臂
    send(cfd, rbuf,sizeof(rbuf), 0);
    sleep(1);
    send(cfd, bbuf,sizeof(bbuf), 0);

	//通过键盘控制机械臂
	char button = 0;
	printf("请输入w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)\
			输入q退出\n");
	while(1)
	{
		button = fgetc(stdin);
		getchar();
		if(button == 'q')
		{
			break;
		}
		switch(button)
		{
			case 'w':
				rbuf[3]++; 				//红色臂角度增大
    			if(rbuf[3] > 90)		//红色臂角度最大为90度
				{
					rbuf[3] = -90;		//红色臂角度最小为-90度
				}
				send(cfd, rbuf,sizeof(rbuf), 0);
				break;
			case 's':
				rbuf[3]--; 				//红色臂角度减小
				if(rbuf[3] < -90)		//红色臂角度最小为-90度
				{
					rbuf[3] = 90; 		//红色臂角度最大为90度
				}
    			send(cfd, rbuf,sizeof(rbuf), 0);
				break;
			case 'd':
				bbuf[3]++; 				//蓝色臂角度增大
				if(bbuf[3]>-76 && bbuf[3]<0)	//char类型取值范围[-128,127] 即当128度到180度时,bbuf[3] 中实际值为实际角度-256,即角度范围 [-128,-76]∪[0,127]
				{
					bbuf[3] = 0;
				}
    			send(cfd, bbuf,sizeof(bbuf), 0);
				break;
			case 'a':
				bbuf[3]--;
				if(bbuf[3] == -1) 		//当角度小于0时,即bbuf[3] = -1时,角度变为最大角度180度
				{
					bbuf[3] = 180;
				}
    			send(cfd, bbuf,sizeof(bbuf), 0);
				break;
			default:
				printf("指令错误\n");
				break;
		}
		sleep(1);
	}
    

    
    //5、关闭套接字
    close(cfd);

    return 0;
}

2> 运行效果

简易机械臂控制

二、思维导图

相关推荐
Elastic 中国社区官方博客20 分钟前
隐藏在可观测性数据中的安全攻击
大数据·网络·安全·elasticsearch·搜索引擎·全文检索
ch3nyuyu38 分钟前
驱动第三阶段
linux
见闻小天地39 分钟前
空调机房冷冻泵与冷却泵是什么?选型要点与赛莱默方案解析
大数据·网络
LuminousCPP41 分钟前
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化
c语言·数据结构·笔记·算法·排序算法
云飞云共享云桌面1 小时前
钣金制造研发优化:不采购传统工作站,实现 SolidWorks 团队共用服务器开展三维建模
运维·服务器·网络·数据库·3d·制造
竞赛考级题库1 小时前
202606 青少年等级考试C/C++真题一级 建议答题时长:60min
java·c语言·c++
啊阿狸不会拉杆1 小时前
《计算机网络-自顶向下方法》7.2 无线链路和网络特征 读书笔记
网络·计算机网络
迷茫、Peanut1 小时前
C语言混合链接
c语言
lightningyang1 小时前
密码技术应用实验—AES 对称加密与口令安全初体验
网络·安全·天枢一体化虚拟仿真平台·密码技术应用
xixiaoyunya1 小时前
只备份数据远远不够:服务器系统备份的完整方案与实践
服务器·网络·数据库