当前位置: 首页 > news >正文

41、网络编程/TCP.UDP通信模型练习20240301

一、编写基于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<myhead.h>
#define SER_IP "192.168.125.64"  //服务器IP
#define SER_PORT 8888          //服务器端口号
int main(int argc, const char *argv[])
{//创建套接字文件int sfd=socket(AF_INET,SOCK_STREAM,0);if(sfd==-1){perror("socket error");return -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);//连接服务器if(connect(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}puts("connect success");//数据发送//定义控制红色臂的数组并初始化,范围是[-90,90]char rbuf[5]={0xff,0x02,0x00,0x00,0xff};//定义控制蓝色臂的数组并初始化,范围是[0,180]unsigned char bbuf[5]={0xff,0x02,0x01,0x00,0xff};//发送初始值send(sfd,rbuf,sizeof(rbuf),0);sleep(1);//防止沾包send(sfd,bbuf,sizeof(bbuf),0);char key=0;while(1){system("stty -icanon");//关闭缓冲区key=getchar();fflush(stdin);switch(key){case 'W':case 'w':{rbuf[3]+=2;//每次操作的角度偏移2度if(rbuf[3]>=90){rbuf[3]=90;}send(sfd,rbuf,sizeof(rbuf),0);}break;case 'S':case 's':{rbuf[3]-=2;if(rbuf[3]<=-90){rbuf[3]=-90;}send(sfd,rbuf,sizeof(rbuf),0);}break;case 'D':case 'd':{bbuf[3]+=2;if(bbuf[3]>=180){bbuf[3]=180;}send(sfd,bbuf,sizeof(bbuf),0);}break;case 'A':case 'a':{bbuf[3]-=2;if(bbuf[3]>180)//无符号整数小于零后会向255循环{bbuf[3]=0;}send(sfd,bbuf,sizeof(bbuf),0);}break;}}close(sfd);return 0;
}

运行:

思维导图

 

http://www.lryc.cn/news/308995.html

相关文章:

  • Python中操作MySQL和SQL Server数据库的基础与实战【第97篇—MySQL数据库】
  • 【兔子机器人】五连杆运动学解算与VMC(virtual model control)
  • 学习鸿蒙基础(6)
  • 标准PoE交换机、非标准PoE交换机和非PoE交换机三者到底有何区别?
  • 【软件测试】--功能测试4-html介绍
  • 模型优化_XGBOOST学习曲线及改进,泛化误差
  • Java8 - LocalDateTime时间日期类使用详解
  • 3D城市模型可视化:开启智慧都市探索之旅
  • 某查查首页瀑布流headers加密
  • Microsoft Visio 文本框上标或下标
  • Java项目:29 基于SpringBoot+thymeleaf实现的图书管理系统
  • Unity游戏项目中的优化之摄像机视锥体剔除优化
  • 超1000本计算机经典书籍分享(均可免费下载)
  • AI大模型提供商有哪些?
  • 【Linux】部署单机项目(自动化启动)
  • MySQL:使用聚合函数查询
  • 【Linux C | 网络编程】套接字选项、getsockopt、setsockopt详解及C语言例子
  • Springboot解决模块化架构搭建打包错误找不到父工程
  • Android全屏黑边解决方案
  • 【矩阵】【方向】【素数】3044 出现频率最高的素数
  • 什么是RPC?谈谈你对RPC的理解
  • C语言实现哈希查找之线性探测算法
  • js:lodash template文件模板语法和应用
  • 在Windows系统上安装Docker和SteamCMD容器的详细指南有哪些?
  • 点击输入框,获取提示信息
  • 房贷计算器微信小程序原生语言
  • 【C++从0到王者】第四十六站:图的深度优先与广度优先
  • Docker技术概论(2):Docker环境的搭建
  • 电脑休眠之后唤不醒
  • Python列表中添加删除元素不走弯路