【网络编程】 TCP机械臂测试(C语言)

目录

前言:

代码实现:

输出结果如下:


前言:

1、通过以下操作实现机械臂控制

w(红色臂角度增大)

s(红色臂角度减小)

d(蓝色臂角度增大)

a(蓝色臂角度减小)按键控制机械臂

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

1、char rbuf[5] = {0xff, 0x02, 0x00, 0x00, 0xff}

2、0xff:起始结束协议,固定的

3、0x02:控制机械手臂协议,固定的

4、x:指定要操作的机械臂

0x00 红色摆臂

0x01 蓝色摆臂

5、y:指定角度

代码实现:

cs 复制代码
#include <myhead.h>
#define SER_PORT 8888               //端口号为8888
#define SER_IP "192.168.2.71"          
#define CLI_PORT 6666
#define CLI_IP "192.168.83.128"


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

	//将端口号快速重用
	int reuse = 1;
	if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1)
	{
		perror("setsockopt error");
		return -1;
	}
	printf("端口号快速重用成功\n");

	//2、绑定IP地址和端口号
	//2、为套接字绑定ip地址和端口号
	//2.1 填充地址信息结构体
	struct sockaddr_in cin;
	cin.sin_family = AF_INET;  //通信域
	cin.sin_port = htons(CLI_PORT); //端口号
	cin.sin_addr.s_addr = inet_addr(CLI_IP); // ip地址

	//2.2绑定工作
	if(bind(cfd,(struct sockaddr *)&cin,sizeof(cin)) == -1)
	{
		perror("bind error");
		return -1;
	}
	printf("bind success\n");


	//3、连接到服务器
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(SER_PORT);
	sin.sin_addr.s_addr = inet_addr(SER_IP);

	//3.2链接服务器
	if(connect(cfd,(struct sockaddr *)&sin,sizeof(sin)) == -1)
	{
		perror("connect error");
		return -1;
	}
	printf("链接服务器成功\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)
	{

		scanf("%c", &key);        //键盘输入一个字符
		getchar();                //吸收回车

		switch(key)
		{
		case 'W':
		case 'w':
			{
				rbuf[3] += 2;       //每次操作的角度偏移2度
				
				send(cfd, rbuf, sizeof(rbuf), 0);
			}
			break;

		case 'S':
		case 's':
			{
				rbuf[3] -= 2;
				
				send(cfd,rbuf,sizeof(rbuf),0);
			}
			break;

		case 'A':
		case 'a':
			{
				bbuf[3] -= 2;       //每次操作的角度偏移2度
				
				send(cfd, bbuf, sizeof(bbuf), 0);
			}
			break;

		case 'D':
		case 'd':
			{
				bbuf[3] += 2;       //每次操作的角度偏移2度
			
				send(cfd, bbuf, sizeof(bbuf), 0);
			}
			break;
		case 'q':
			goto END;
		default:
			break;
		}
	}

	END:

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

输出结果如下:

能够通过TCP通信,成功通过"w,s,a,d"键盘输入去控制机械臂的旋转

相关推荐
m0_609000422 分钟前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记1 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
suifen_3 小时前
RK3229_Android9.0_Box 4G模块EC200A调试
网络
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py3 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
CoolTiger、4 小时前
【Vmware16安装教程】
linux·虚拟机·vmware16
jiao000014 小时前
数据结构——队列
c语言·数据结构·算法
铁匠匠匠5 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
C-SDN花园GGbond5 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
学习3人组5 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos