ROS-Industrial 之 simple_message 实现分析八

本文深入分析了ROS-Industrial的simple_message包,重点探讨了simple_socket类及其派生类如tcp_socket、tcp_client、tcp_server、udp_socket等的结构和功能。这些类实现了通信接口和socket通信的简化,为TCP和UDP通信提供了基础。在simple_socket中,rawSendBytes()和rawReceiveBytes()是关键的通信交互函数,而在tcp_socket中,实现了连接和数据通信的功能。通过对这些内容的学习,有助于更好地理解和使用ROS-Industrial的通信协议。
摘要由CSDN通过智能技术生成

目录

simple_socket

命名空间simple_socket中枚举了标准的通信端口信息,此类是对industrial::smpl_msg_connection::SmplMsgConnection类的继承,而industrial::smpl_msg_connection::SmplMsgConnection类是一个虚基类,提供了socket通信的简化接口。并且simple_socket是其它socket通信类的基础,所以与simple_socket对应的文件中,也定义了相关的信息。由于不使用motoplus所以与motoplus相关的宏定义已删除。

#ifndef SIMPLE_SOCKET_H
#define SIMPLE_SOCKET_H
//定义包含的头文件,尤其是smpl_msg_connection.h,因为其中含有实现通信的虚基类
#ifndef FLATHEADERS
#include "simple_message/log_wrapper.h"
#include "simple_message/shared_types.h"
#include "simple_message/smpl_msg_connection.h"
#else
#include "log_wrapper.h"
#include "shared_types.h"
#include "smpl_msg_connection.h"
#endif

#ifdef LINUXSOCKETS
//Linux中进行通信所需要包含的头文件
#include "sys/socket.h"
#include "arpa/inet.h"
#include "string.h"
#include "unistd.h"
#include "netinet/tcp.h"
#include "errno.h"

#define SOCKET(domain, type, protocol) socket(domain, type, protocol)
#define BIND(sockfd, addr, addrlen) bind(sockfd, addr, addrlen)
#define SET_NO_DELAY(sockfd, val) setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val))
#define SET_REUSE_ADDR(sockfd, val) setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val))
#define LISTEN(sockfd, n) listen(sockfd, n)
#define ACCEPT(sockfd, addr, addrlen) accept(sockfd, addr, addrlen)
#define CONNECT(sockfd, dest_addr ,addrlen) connect(sockfd, dest_addr, addrlen)
#define SEND_TO(sockfd, buf, len, flags, dest_addr, addrlen) sendto(sockfd, buf, len, flags, dest_addr, addrlen)
#define SEND(sockfd, buf, len, flags) send(sockfd, buf, len, flags)
#define RECV_FROM(sockfd, buf, len, flags, src_addr, addrlen) recvfrom(sockfd, buf, len, flags, src_addr, addrlen)
#define RECV(sockfd, buf, len, flags) recv(sockfd, buf, len, flags)
#define SELECT(n, readfds, writefds, exceptfds, timeval) select(n, readfds, writefds, exceptfds, timeval)
#define CLOSE(fd) close(fd)
#ifndef HTONS // OSX defines HTONS
#define HTONS(num) htons(num)
#endif
#define INET_ADDR(str) inet_addr(str)
#define SOCKLEN_T socklen_t
#define GETHOSTBYNAME(str) gethostbyname(str)
#endif

namespace industrial
{
   
  namespace simple_socket
  {
   
    //枚举标准socket通信端口(支持所有平台),对于双臂机器人而言,用同一控制器时要增加对应的端口
     namespace StandardSocketPorts
    {
   
      enum StandardSocketPort
      {
   MOTION = 11000, SYSTEM = 11001, STATE = 11002, IO = 11003 };
    }
    typedef StandardSocketPorts::StandardSocketPort StandardSocketPort;

    //定义socket功能,继承自SmplMsgConnection虚基类
    class SimpleSocket : public industrial::smpl_msg_connection::SmplMsgConnection
    {
   
    public:
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值