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

简易机械臂控制

二、思维导图

相关推荐
迈威通信16 分钟前
迈威通信助力海上探测,守护蓝色疆域
网络·自动化·能源
脱了格子衬衫33 分钟前
linux安装ansible
linux·运维·ansible
励志成为嵌入式工程师41 分钟前
c语言选择排序
c语言·算法·排序算法
小丑西瓜66641 分钟前
MySQL库操作
linux·服务器·数据库·mysql
三小尛43 分钟前
希尔排序(C语言)
c语言·数据结构·排序算法
風清掦1 小时前
C/C++每日一练:编写一个查找子串的位置函数
c语言·c++·算法
三小尛1 小时前
插入排序(C语言)
c语言·开发语言
WolvenSec1 小时前
C/C++逆向:结构体逆向分析
c语言·开发语言·c++·网络安全
小珑也要变强3 小时前
shell脚本基本概念讲解
linux·运维
还在学习进步3 小时前
C语言第十一周课——函数的调用
c语言·算法·排序算法