TCP机械臂测试

#include<myhead.h>
#define SER_IP "192.168.125.242"
#define SER_PORT 1234
#define CLI_IP "192.168.243.131"
#define CLI_PORT 9999

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("socket success cfd = %d\n", cfd);           //3

    //设置端口号快速重用
    int reuse = 1;
    if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse))==-1)
    {
        perror("setsockopt error");
        return -1;
    }
    printf("端口号快速重用成功\n");

    //2、绑定IP和端口号
    //对于客户端而言,如果没有绑定IP地址和端口号
    //那么系统回默认将当前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、连接服务器
    //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);//服务器IP

    //3.2 连接服务器
    if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin))==-1)
    {
        perror("connect error");
        return -1;
    }
    printf("connect success\n");

    //4、数据收发
    char hbuf[5] = {0xff, 0x02, 0x00,0x5A, 0xff};
    unsigned char lbuf[5] = {0xff, 0x02, 0x01, 0x00, 0xff};

    send(cfd, hbuf, sizeof(hbuf), 0);          //初始化红色臂展
    send(cfd, lbuf, sizeof(lbuf), 0);          //初始化蓝色臂展

        char rbuf[2]="";

        while(1)
        {
                printf("******************************\n");
                printf("******w红色臂角度增加*********\n");
                printf("******s红色臂角度减小*********\n");
                printf("******d蓝色臂角度增加*********\n");
                printf("******a红色臂角度减小*********\n");
                printf("******请输入》》》》*********\n");
                bzero(rbuf,sizeof(rbuf));
                fgets(rbuf,sizeof(rbuf),stdin);
                getchar();
                rbuf[2]=0;

//加个输入字符的判断,不正确则重新输出
                if(strcmp(rbuf,"w")==0)
                {
                hbuf[3]-=0x05;

//加个判断

                        send(cfd, hbuf, sizeof(hbuf), 0);          //初始化红色臂展            
                }
                if(strcmp(rbuf,"s")==0)
                {
                        hbuf[3]+=0x05;

//加个超出判断

                        send(cfd, hbuf, sizeof(hbuf), 0);          //初始化红色臂展            
                }
                if(strcmp(rbuf,"d")==0)
                {

                        lbuf[3]+=0x05;

//加个判断
                        send(cfd, lbuf, sizeof(lbuf), 0);          //初始化蓝色臂展
                }
                if(strcmp(rbuf,"a")==0)
                {
                        lbuf[3]-=0x05;

//加个判断

                         send(cfd, lbuf, sizeof(lbuf), 0);          //初始化蓝色臂展
                }
        }
    //5、关闭套接字
    close(cfd);
    


    return 0;
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+springboot实现聊天功能

前言 在我的项目中&#xff0c;突然有种想法&#xff0c;想实现聊天功能&#xff0c;历经一段时间终于做出来了&#xff1b;那么接下来会讲解如何实现&#xff0c;这篇文章只会实现最基础的逻辑&#xff0c;实时获取对方聊天记录&#xff0c;话不多说&#xff0c;我们就开始吧…

吹爆,一款实用的个人IT工具箱

作为一名开发人员&#xff0c;我们在日常工作和学习中常常需要使用一系列小工具&#xff0c;如JSON格式化、JSON转表格、当前时间戳、XML格式化、SQL格式化、密码生成以及UUID生成等。通常情况下&#xff0c;我们会在网上搜索各种在线工具来满足这些需求。 然而&#xff0c;这…

odoo17开发教程(21):数据文件详解

Odoo 以数据为导向&#xff0c;因此模块定义的一个重要部分就是其管理的各种记录的定义&#xff1a;用户界面&#xff08;菜单和视图&#xff09;、安全性&#xff08;访问权限和记录规则&#xff09;、报告和普通数据都是通过记录定义的。 结构 在 Odoo 中定义数据的主要方式…

【C++ 哈希应用】

文章目录 位图概念代码实现海量数据处理 布隆过滤器概念代码实现海量数据处理 哈希切割海量数据处理 位图 概念 一个值在给定的集合中有两种状态&#xff0c;在或不在&#xff0c;要表示这种状态&#xff0c;最少可以用一个比特位&#xff0c;比特位为1表示在&#xff0c;比特…

【简单介绍下单片机】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

大学生简历大赛演讲稿(6篇)

大学生简历大赛演讲稿&#xff08;6篇&#xff09; 以下是六篇大学生简历大赛演讲稿的范文&#xff0c;供您参考&#xff1a; 范文一&#xff1a;展现真我&#xff0c;点亮未来 尊敬的评委、亲爱的同学们&#xff1a; 大家好&#xff01; 今天&#xff0c;我站在这里&#xf…

open-webui与ollama的部署最后完整之命令

docker run -d --networkhost -v open-webui:/app/backend/data -e HF_ENDPOINThttps://hf-mirror.com -e OLLAMA_BASE_URLhttp://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main -e HF_ENDPOINThttps://hf-mirror.com 一定要加上&a…

【C++】:C++关键字,命名空间,输入输出,缺省参数

目录 一&#xff0c;C关键字(C98)二&#xff0c;命名空间2.1 命名冲突2.2 关键字namespace2.2.1 命名空间中可以定义变量/函数/类型2.2.2 命名空间可以嵌套2.2.3 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 2.3 命名空间的使用2.3.1 指定…

剑指offer之牛客与力扣——前者分类题单中的题目在后者的链接

搜索 [4.12完成] JZ1 LCR 172. 统计目标成绩的出现次数 JZ3 153. 寻找旋转排序数组中的最小值 JZ4 LCR 014. 字符串的排列 JZ5 LCR 163. 找到第 k 位数字 400 动态规划 [4.15完成] JZ2 LCR 161. 连续天数的最高销售额 53 JZ3 LCR 127. 跳跃训练 70 JZ4 LCR 126. 斐波那契…

笔记:编写函数,接收整数参数t,返回斐波那契数列中大于t的第1个数。

文章目录 前言一、斐波那契数列是什么&#xff1f;二、编写代码1.代码2.优化代码 总结 前言 题目&#xff1a;编写函数&#xff0c;接收整数参数t&#xff0c;返回斐波那契数列中大于t的第1个数。 在编写函数之前&#xff0c;我们首先需要了解一下斐波那契数列是什么。 一、斐…

gemini国内怎么用

gemini国内怎么用 Google Gemini 作为一个尚处于研发阶段的大型语言模型&#xff0c;其具体功能和性能尚未公开&#xff0c;因此无法对其好用程度做出明确评价。 然而&#xff0c;基于 Google 在人工智能领域的领先地位和技术实力&#xff0c;我们可以对其潜力进行一些推测&a…

【xgboost】使用xgboost训练一个简单模型

使用pandas读取特征数据&#xff0c;并处理数据中的双引号 使用xgboost训练一版模型 xgboost1.6.2 #!/usr/bin/env python # -*- coding:utf-8 -*- import pandas as pd import numpy as np from sklearn.model_selection import train_test_split import xgboost as xgb impor…

你不知道的JavaScript---深入理解 JavaScript 中的 this 关键字

你好&#xff0c;我是小白Coding日志&#xff0c;一个热爱技术的程序员。在这里&#xff0c;我分享自己在编程和技术世界中的学习心得和体会。希望我的文章能够给你带来一些灵感和帮助。欢迎来到我的博客&#xff0c;一起在技术的世界里探索前行吧&#xff01; 在 JavaScript …

大型网站系统架构演化实例_4.数据库读写分离

1.数据库读写分离 网站在使用缓存后&#xff0c;使对大部分数据读操作访问都可以不通过数据库就能完成&#xff0c;但是仍有一部分操作&#xff08;缓存访问不命中、缓存过期&#xff09;和全部的写操作都需要访问数据库&#xff0c;在网站的用户达到一定规模后&#x…

Dockerfile CMD、ENTRYPOINT 区别

ENTRYPOINT与CMD都可以对iamge配置启动命令。但两者之间还是有一些细微的区别。多数情况下需要用户在二者中选择其一使用&#xff0c;但也可以共同使用两者。下面将具体分析二者不同的使用场景。 ENTRYPOINT or CMD 最终&#xff0c;ENTRYPOINT与CMD都提供了一个方法&#xff0…

通过实例学C#之ArrayList

介绍 ArrayList对象可以容纳若干个具有相同类型的对象&#xff0c;那有人说&#xff0c;这和数组有什么区别呢。其区别大概可以分为以下几点&#xff1a; 1.数组效率较高&#xff0c;但其容量固定&#xff0c;而且没办法动态改变。 2.ArrayList容量可以动态增长&#xff0c;但…

ros1中python3包调用自定义.py文件

ros中python包相互import不成功问题 问题解决办法 问题 在ros工程中&#xff0c;运行python文件难以直接import自己写的py文件&#xff0c;相互之间无法import&#xff0c;但是在python3虚拟环境python *.py文件就可以正常运行&#xff01; 注意这里还有个问题&#xff0c;我…

❤️‍FlyFlow工作流周更来咯~~

FlyFlow 借鉴了钉钉与飞书的界面设计理念&#xff0c;致力于打造一款用户友好、快速上手的工作流程工具。相较于传统的基于 BPMN.js 的工作流引擎&#xff0c;我们提供的解决方案显著简化了操作逻辑&#xff0c;使得用户能够在极短的时间内构建定制化的业务流程&#xff0c;即便…

前端近7天,近半个月,近1个月,近1年的日期处理

前端如何获取近7天,近1年的日期进行查询? methods:{//近7天getRangeDate(ranges) {let nowDays new Date();let getYear nowDays.getFullYear();let getMonth nowDays.getMonth() 1;let getDate nowDays.getDate();let nd new Date();nd nd.valueOf();nd nd - ranges…

记录汇川:五个ST案例

起保停&#xff1a; 简单数学教学&#xff1a; 数据查找&#xff1a; 按钮检测&#xff1a; 数据堆栈&#xff1a;