目录
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: