【网络编程】 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"键盘输入去控制机械臂的旋转

相关推荐
小麦嵌入式10 分钟前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
暴走的YH10 分钟前
【网络协议】三次握手与四次挥手
网络·网络协议
刘若水11 分钟前
Linux: 进程信号初识
linux·运维·服务器
yuzhangfeng12 分钟前
【云计算物理网络】数据中心网络架构设计
网络·云计算
zhu12893035561 小时前
网络安全的重要性与防护措施
网络·安全·web安全
仙女很美哦1 小时前
Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
websocket·网络协议·tcp/ip·http·网络安全·https·udp
jelasin1 小时前
LibCoroutine开发手记:细粒度C语言协程库
c语言
网络研究院1 小时前
ChatGPT 的新图像生成器非常擅长伪造收据
网络·人工智能·安全·chatgpt·风险·技术·欺诈
篝火悟者1 小时前
自学-C语言-基础-数组、函数、指针、结构体和共同体、文件
c语言·开发语言
路由侠内网穿透2 小时前
本地部署开源流处理框架 Apache Flink 并实现外部访问
大数据·网络协议·tcp/ip·flink·服务发现·apache·consul