ROS系统下完成TCP通信,服务端和客户端C语言编程
服务端(Server):

#include <std_msgs/Bool.h>
#include "ros/ros.h"
#include<stdio.h>
#include<thread>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <unistd.h>#define MAXLINE 4096
int    listenfd, connfd;
struct sockaddr_in     servaddr;
ros::Publisher robot_flag_publish ;void init()
{if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);exit(0);}memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(8989);if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);exit(0);}if( listen(listenfd, 10) == -1){printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);exit(0);}printf("======waiting for client's request======\n");while(1){if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1){printf("accept socket error: %s(errno: %d)",strerror(errno),errno);continue;}else{break;}}
}void receive()
{while(1){char    buff[4096];int n = recv(connfd, buff, MAXLINE, 0);if(n > 0){printf("recv msg from client: %s\n", buff);std_msgs::Bool data;data.data = true;robot_flag_publish.publish(data);}}
}void flag_message(const std_msgs::Bool &flag_data)
{if(flag_data.data==true){char buff_send[] = "success";send(connfd, buff_send, strlen(buff_send),0);printf("send msg\n");}
}int main(int argc, char** argv)
{ros::init(argc,argv,"server");ros::NodeHandle nh;ros::NodeHandle n("~");ros::Subscriber robot_flag_subScribe = n.subscribe("/robot1_flag",1,&flag_message);robot_flag_publish   = nh.advertise<std_msgs::Bool>("robot2_flag", 1);init();//std::thread recv_thread(receive);while(ros::ok){char    buff[4096];int n = recv(connfd, buff, MAXLINE, 0);if(n > 0){printf("recv msg from client: %s\n", buff);std_msgs::Bool data;data.data = true;robot_flag_publish.publish(data);}ros::spinOnce();}close(connfd);close(listenfd);//recv_thread.join();return 0;
}

客户端(Client):

#include <std_msgs/Bool.h>
#include "ros/ros.h"
#include<stdio.h>
#include<thread>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>#define MAXLINE 4096
int    sockfd;
struct sockaddr_in     servaddr;
ros::Publisher robot_flag_publish ;void init()
{if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);exit(0);}memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");servaddr.sin_port = htons(8989);if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){printf("connect error: %s(errno: %d)\n",strerror(errno),errno);exit(0);}
}void receive()
{while(1){char    buff[4096];int n = recv(sockfd, buff, MAXLINE, 0);if(n > 0){printf("recv msg from client: %s\n", buff);std_msgs::Bool data;data.data = true;robot_flag_publish.publish(data);}}
}void flag_message(const std_msgs::Bool &flag_data)
{if(flag_data.data==true){char buff_send[] = "success";send(sockfd, buff_send, strlen(buff_send),0);printf("send msg\n");}
}int main(int argc, char** argv)
{ros::init(argc,argv,"client");ros::NodeHandle nh;ros::NodeHandle n("~");ros::Subscriber robot_flag_subScribe = n.subscribe("/robot2_flag",1,&flag_message);robot_flag_publish   = nh.advertise<std_msgs::Bool>("robot1_flag", 1);init();//std::thread recv_thread(receive);while(ros::ok()){char    buff[4096];int n = recv(sockfd, buff, MAXLINE, 0);if(n > 0){printf("recv msg from client: %s\n", buff);std_msgs::Bool data;data.data = true;robot_flag_publish.publish(data);}ros::spinOnce();}printf("end\n");close(sockfd);//recv_thread.join();return 0;
}

关于CMakeLista.txt与package.xml的设置

关于CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(my_socket)set(CMAKE_CXX_FLAGS "-std=c++11 -Wall ${CMAKE_CXX_FLAGS}")find_package(catkin REQUIRED COMPONENTSstd_msgsroscpp
)catkin_package()include_directories(${catkin_INCLUDE_DIRS}
)add_executable(server src/server.cpp
)
target_link_libraries(server${catkin_LIBRARIES}
)add_executable(clientsrc/client.cpp
)
target_link_libraries(client${catkin_LIBRARIES}
)

关于package.xml

<package>
<name>my_socket</name>
<version>0.0.0</version>
<description>The socket package</description>
<maintainer email="flight1506263@126.com">flight</maintainer>
<license>TODO</license>
<author email="flight1506263@126.com">flight</author>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>std_msgs</build_depend>
<build_depend>roscpp</build_depend>
<run_depend>std_msgs</run_depend>
<run_depend>roscpp</run_depend>
<!--  The export tag contains other, unspecified, tags  -->
<export>
<!--  Other tools can request additional information be placed here  -->
</export>
</package>

ROS系统下完成TCP通信 C语言编程相关推荐

  1. TCP/IP网络编程---Linux系统下的TCP套接字编程

    目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据 ...

  2. Windows系统下的TCP参数优化(注册表\TCPIP\Parameters)

    Windows系统下的TCP参数优化 TCP连接的状态与关闭方式及其对Server与Client的影响 http://www.2cto.com/net/201304/206071.html 通常会采用 ...

  3. 【TCP/IP】Windows系统下的TCP参数优化

    通常会采用修改注册表的方式改进Windows的系统参数.下面将为大家介绍Windows系统下的TCP参数优化方式,适用于Windows 2003.Windows XP.Windows 7以及Serve ...

  4. Windows系统下的TCP参数优化

    Windows系统下的TCP参数优化 1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状 ...

  5. ROS中阶笔记(一):机器人系统设计—ROS系统下连接外部传感器

    ROS中阶笔记(一):机器人系统设计-ROS系统下连接外部传感器 文章目录 01 连接摄像头 1.1 ROS下连接usb_cam 1.1.1 前期准备 1.1.2 问题 1.1.3 安装usb_cam ...

  6. Windows系统编译GSL2.7用于C语言编程(2022.5.8)

    Windows系统编译GSL2.7用于C语言编程(2022.5.8) 1. GSL(GNU Scientific Library) 1.1 GSL简介 1.2 前人在Windows平台下已编译好的GS ...

  7. java tcp client断开重连_ESP8266_12 ESP8266客户端模式下的TCP通信

    上一节说了UDP,这一节就聊聊TCP,毕竟它俩经常同时出现.优缺点上一节也提了一下:安全性好,速度慢. 除了这两点,还有就是: TCP通信之前是需要建立连接的,如同打电话之前先拨号一样,而UDP无连接 ...

  8. Windows下的TCP通信

    刚好最近在做tcp.udp通信的实验就顺便写了这篇,方便以后查阅 文章目录 环境 步骤 流程图 源代码 环境 windows 10 visual studio2013 步骤 使用WSAStartup( ...

  9. 在 ROS 系统下使用海康 SDK 并编译官方 demo

    文章目录 目录 文章目录 前言 一.配置ROS系统(以Ubuntu18.04  ROS Melodic版本为例)(以Ubuntu18.04  ROS Melodic版本为例) 1.配置 ROS 镜像源 ...

最新文章

  1. IOS学习之 网络编程(10)--简单介绍ASI框架的使用
  2. JOGL - Java与OpenGl的绑定(转)
  3. 青瓷游戏上市首日破发,“元宇宙光环”能否拯救年内首支游戏股?
  4. 写好一份数据分析报告的13个要点
  5. Docker 6岁啦!多场线下 Party 即将来袭!
  6. MySQL兼容服务器_服务器不支持 MySql 数据库的解决方法
  7. 阿里巴巴(alibaba)系列_druid 数据库连接池_监控(一篇搞定)记录执行慢的sql语句...
  8. ExpandRegion for Sublime Text:快速选择文本
  9. 区块链3.0 EOS和TRON
  10. 聚类分析通俗易懂解释
  11. 从后端到页面:如何全方位监控 Ruby 应用?
  12. [日推荐] 『雅思口语自练狂』雅思考试神助攻!
  13. 英语好不好,不影响做外贸
  14. Python之OpenGL笔记(17):键盘鼠标控制摄像机移动旋转
  15. mysql from 嵌套查询,MySQL嵌套查询实例详解
  16. 【北航软院+保研复习】计算机网络复习笔记
  17. 《庄子·内篇·大宗师第六》
  18. Mac版几何画板正式上线
  19. gow上里还有gfind
  20. .md 基本常用编写语法

热门文章

  1. rounded-{0 | top | right | bottom | left | circle } 边角半径设置 - bootStrap4常用CSS笔记(2019-05-16 09:38)...
  2. 1.3寸 SH1106 OLED 屏幕驱动 基于stm32
  3. visio修改默认字体
  4. The process has been signaled with signal '5'. 解决办法
  5. 风险管理可分为哪两类?具体方法是什么?
  6. 批处理使用技巧:批量修改文件名
  7. 光线追踪学习:GPU端光线追踪学习
  8. 学习光线追踪(16)---折射计算[1]
  9. 基于激光雷达的室内探测系统
  10. 分析称惠普赶走前任CEO赫德堪比苹果赶走乔布斯