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

相关推荐
blessing。。40 分钟前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
2202_754421541 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
ZZZCY20031 小时前
华为ENSP--IP编址及静态路由配置
网络·华为
EasyCVR1 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
运维&陈同学2 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
hgdlip2 小时前
主IP地址与从IP地址:深入解析与应用探讨
网络·网络协议·tcp/ip
珹洺2 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode
今天我刷leetcode了吗2 小时前
docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker
tcp/ip·docker·电脑
科技象限2 小时前
电脑禁用U盘的四种简单方法(电脑怎么阻止u盘使用)
大数据·网络·电脑
东方隐侠安全团队-千里2 小时前
网安瞭望台第3期:俄黑客 TAG - 110组织与密码攻击手段分享
网络·chrome·web安全·网络安全