TCP,机械臂测试

通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂

注意:关闭计算机的杀毒软件,电脑管家,防火墙

1)基于TCP服务器的机械臂,端口号是8888, ip是Windows的ip;

查看Windows的IP:按住Windows+r 按键,输入cmd , 输入ipconfig

2)点击软件中的开启监听;

3)机械臂需要发送16进制数,共5个字节,协议如下

0xff 0x02 x y 0xff 0xff:起始结束协议,固定的;

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

x:指定要操作的机械臂 0x00 红色摆臂 0x01 蓝色摆臂

y:指定角度

复制代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <myhead.h>
#define SER_PORT 8888 //服务端口
#define SER_IP "192.168.125.82" //服务器ip地址
//#define CLI_PORT 9999// 客户端的端口
//#define CLI_IP "192.168.125.82"  //客户端的ip地址

int main(int argc, const char *argv[])
{
	//1创建用于通信的套接字文件描述符
	int cfd=-1;
	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绑定
/*	//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);
	//2.2
	if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
	{
		perror("bind error");
		return -1;
	}
	printf("bind success\n");

	*/
	//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);
	//3.2连接 
	if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
	{
		perror("connect error");
		return -1;
	}
	printf("connect success\n");
	//4收发数据
	char rbuf[5]={0xff,0x02,0x00,0x01,0xff}; //红色
	unsigned char bbuf[5]={0xff,0x02,0x01,0x02,0xff}; //蓝色
	send(cfd,rbuf,sizeof(rbuf),0);
	sleep(1);
	send(cfd,bbuf,sizeof(bbuf),0);


	char key=0;
	int s=1;  //控制while循环
	while(s==1)
	{
		//从终端获取按键
 

		printf("请输入相关操作:");
		scanf("%c",&key);
		getchar();
		//从输入的字节符进行分支选择
		switch(key)
		{
			case 'w':
			case 'W':
				{
					rbuf[3]+=2;
					if(rbuf[3]>=90)
					{
						rbuf[3]=90;
					}
					//发送数据
					int c=send(cfd,rbuf,sizeof(rbuf),0);
					if(c==-1)
					{
						perror("send error");
						return -1;
					}
					break;
					
				}
			case 's':
			case 'S':
				{
					rbuf[3]-=2;
					if(rbuf[3]<=-90)
					{
						rbuf[3]=-90;
					}
					//发送数据
					int c=send(cfd,rbuf,sizeof(rbuf),0);
					if(c==-1)
					{
						perror("send error");
						return -1;
					}
					break;
					
				}
			case 'd':
			case 'D':
				{
					bbuf[3]+=2;
					if(bbuf[3]>=180)
					{
						rbuf[3]=180;
					}
					//发送数据
					int c=send(cfd,bbuf,sizeof(bbuf),0);
					if(c==-1)
					{
						perror("send error");
						return -1;
					}
					break;
					
				}
			case 'a':
			case 'A':
				{
					bbuf[3]=bbuf[3]-2;
					if(bbuf[3]<=0)
					{
						bbuf[3]=0;
					}
					printf("%d\n",bbuf[3]);
					//发送数据
					int c=send(cfd,bbuf,sizeof(bbuf),0);
					if(c==-1)
					{
						perror("send error");
						return -1;
					}
					break;
					
				}
			case 'q':
			case 'Q':
				{
					s=0;
					break; //结束循环
					
				}
			default:
				{
					printf("内容输入错误请重新输入\n");
					break;
				}
						
		}
		
	}
	//5关闭套接字
	close(cfd);
	return 0;
}
相关推荐
FPGA小迷弟28 分钟前
FPGA开发Vivado Block Design/Vitis/SDK/xlinx/开发教程,保姆级别,一看就会!
网络协议·tcp/ip·fpga开发·verilog·fpga
FPGA小迷弟43 分钟前
基于FPGA实现智能网卡的概念,什么是智能网卡
网络协议·tcp/ip·fpga开发·verilog·fpga
DYWorker0012 小时前
第1课:基于正点原子RK3568开发板读懂Linux内核
linux·运维·网络
深圳恒讯3 小时前
国外云服务器部署企业官网,怎样确定配置、IP 与后续扩容方案?
运维·服务器·tcp/ip
Lzg_na4 小时前
数据链路层差错控制使用的算法详解
网络
努力努力再努力wz4 小时前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql
loulanyue_5 小时前
当AI学会自主攻击与渗透破壁:Agent行为链失控与Mythos级攻防颠覆下的安全范式重构——读CNCC2026第六届网络生态治理论坛实录
网络·人工智能·安全
2401_868534785 小时前
英语演讲:麻省理工校长2024年毕业典礼演讲
服务器·网络
码完就睡6 小时前
Linux——以太网协议
运维·服务器·网络·1024程序员节
CV爱数码6 小时前
论文精读|RED-CNN:残差编解码网络,低剂量 CT 去噪的经典基线
网络·人工智能·算法·cnn·ct·重建·x-ray