华清远见作业第二十七天——网络编程(第二天)

思维导图:

在虚拟机实现客户端控制机械臂

代码:

cpp 复制代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <a.h>
#define SER_PORT 8888 //服务端口
#define SER_IP "192.168.125.4" //服务器ip地址
#define CLI_PORT 6666// 客户端的端口
#define CLI_IP "192.168.125.229"  //客户端的ip地址
void menu()
{
	printf("*********机械臂操作*********\n");
	printf("*      w增大红色角度       *\n");
	printf("*      s减少红色角度       *\n");
	printf("*      d增大蓝色角度       *\n");
	printf("*      a减少蓝色角度       *\n");
	printf("*      q退出机械臂q        *\n");
	printf("*********机械臂操作*********\n");	
}
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}; //红色
	char bbuf[5]={0xff,0x02,0x01,0x02,0xff}; //蓝色
	char key=0;
	int s=1;  //控制while循环
	while(s==1)
	{
		//从终端获取按键

		menu();
		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;
}

运行效果:

机械臂资源:

https://download.csdn.net/download/m0_62462327/88746050?spm=1001.2014.3001.5501

相关推荐
kkkkkkkkkk_Z1 小时前
学嵌入式和C语言编程数据结构|学习日记Day21:内核链表与队列学习
c语言·数据结构·学习
不正经学生1 小时前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
老一岁1 小时前
c问题总结(1)
c语言·开发语言
一木 之林2 小时前
三、内存管理、指针与堆栈
c语言·jvm·c++
笨笨饿2 小时前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim
caimouse2 小时前
ReactOS 窗口系统分析(20):光标与图标 — cursoricon.c
c语言·开发语言
H_oRIZoN_3 小时前
Linux入门DAY23(C语言树形结构)
linux·c语言·数据结构
caimouse6 小时前
ReactOS 窗口系统分析(25):标题栏显示与系统按钮 — nonclient.c 标题栏专题
c语言·开发语言
caimouse7 小时前
ReactOS 窗口系统分析(14):计时器/属性/加速键/热键 — timer.c + prop.c + accelerator.c + hotkey.c
c语言·开发语言·reactos
水饺编程7 小时前
第5章,[Win32 章节] :贝塞尔样条曲线(一)
c语言·c++·windows·visual studio