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

相关推荐
vip45124 分钟前
Linux 经典面试八股文
linux
大霞上仙26 分钟前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
weixin_4426434244 分钟前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
阑梦清川1 小时前
JavaEE初阶---网络原理(五)---HTTP协议
网络·http·java-ee
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
阿尔帕兹2 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
孤客网络科技工作室2 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
FeelTouch Labs2 小时前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
AndyFrank3 小时前
mac crontab 不能使用问题简记
linux·运维·macos