网络编程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> 运行效果

简易机械臂控制

二、思维导图

相关推荐
c&0xff001 分钟前
Flink反压问题
网络·flink
Want5959 分钟前
C/C++圣诞树①
c语言·开发语言·c++
深圳多奥智能一卡(码、脸)通系统16 分钟前
基于多奥(DAIC)品牌的IC卡电梯门禁系统(梯控)基础配置清单,整合核心硬件、软件及安全组件,确保系统可独立运行并支持未来扩展
网络
googleccsdn35 分钟前
ESNP LAB 笔记:配置MPLS(Part4)
网络·笔记·网络协议
tan180°36 分钟前
Boost搜索引擎 网络库与前端(4)
linux·网络·c++·搜索引擎
Mr. Cao code1 小时前
Docker:颠覆传统虚拟化的轻量级革命
linux·运维·ubuntu·docker·容器
Dontla1 小时前
Docker多共享网络配置策略(Docker多网络、Docker networks、Docker Compose网络、Docker网络、Docker共享网络)
网络·docker·容器
抓饼先生2 小时前
Linux control group笔记
linux·笔记·bash
LUCIAZZZ2 小时前
HTTPS优化简单总结
网络·网络协议·计算机网络·http·https·操作系统
l1t2 小时前
轻量级XML读写库Mini-XML的编译和使用
xml·c语言·解析器