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

简易机械臂控制

二、思维导图

相关推荐
咖喱鱼蛋17 分钟前
Ubuntu安装Electron环境
linux·ubuntu·electron
ac.char21 分钟前
在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)
linux·ubuntu·npm
肖永威26 分钟前
CentOS环境上离线安装python3及相关包
linux·运维·机器学习·centos
tian2kong29 分钟前
Centos 7 修改YUM镜像源地址为阿里云镜像地址
linux·阿里云·centos
布鲁格若门33 分钟前
CentOS 7 桌面版安装 cuda 12.4
linux·运维·centos·cuda
网络安全-杰克38 分钟前
网络安全概论
网络·web安全·php
C-cat.40 分钟前
Linux|进程程序替换
linux·服务器·microsoft
dessler41 分钟前
云计算&虚拟化-kvm-扩缩容cpu
linux·运维·云计算
怀澈12242 分钟前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
DC_BLOG1 小时前
Linux-Apache静态资源
linux·运维·apache