Linux SocketCan client server demo hacking

简介: /*********************************************************************** * Linux SocketCan client server demo hacking * 说明: * 本文主要是解读Linux上的SocketCan的基本使用方法,内容和Linux上的 * 网络编程差不多。
/***********************************************************************
 *           Linux SocketCan client server demo hacking
 * 说明:
 *     本文主要是解读Linux上的SocketCan的基本使用方法,内容和Linux上的
 * 网络编程差不多。
 *  
 *                                    2016-3-28 深圳 南山平山村 曾剑锋
 **********************************************************************/

一、cat client.c
    #include <sys/ioctl.h>
    #include <net/if.h>
    #include <linux/can.h>
    
    #ifndef PF_CAN
    #define PF_CAN 29
    #endif
    
    #ifndef AF_CAN
    #define AF_CAN PF_CAN
    #endif
    
    int main()
    {
        int s;
        unsigned long nbytes;
        struct sockaddr_can addr;
        struct ifreq ifr;
        struct can_frame frame;
    
        // 创建一个SocketCan
        s = socket(PF_CAN,SOCK_RAW,CAN_RAW);
    
        // 设置一些参数,这个是使用的can网络的设备号
        strcpy((char *)(ifr.ifr_name),"can0");
        ioctl(s,SIOCGIFINDEX,&ifr);
        printf("can0 can_ifindex = %x\n",ifr.ifr_ifindex);
    
        // 设置使用CAN协议
        addr.can_family = AF_CAN;
        addr.can_ifindex = ifr.ifr_ifindex;
        bind(s,(struct sockaddr*)&addr,sizeof(addr));
    
        // 设置发送到的设备id
        frame.can_id = 0x123;
        strcpy((char *)frame.data,"hello");
        frame.can_dlc = strlen(frame.data);
    
        printf("Send a CAN frame from interface %s\n",ifr.ifr_name);
    
        // 发送数据
        nbytes = sendto(s,&frame,sizeof(struct can_frame),0,(struct sockaddr*)&addr,sizeof(addr));
        
        return 0;
    }

二、cat server.c
    #include <sys/ioctl.h>
    #include <net/if.h>
    #include <linux/can.h>
    
    #ifndef PF_CAN
    #define PF_CAN 29
    #endif
    
    #ifndef AF_CAN
    #define AF_CAN PF_CAN
    #endif
    
    int main()
    {
        int s;
        unsigned long nbytes,len;
        struct sockaddr_can addr;
        struct ifreq ifr;
        struct can_frame frame;
    
        // 创建一个SocketCan
        s = socket(PF_CAN,SOCK_RAW,CAN_RAW);
    
        // 指定使用的Can网络
        strcpy(ifr.ifr_name,"can0");
        ioctl(s,SIOCGIFINDEX,&ifr);
        printf("can0 can_ifindex = %x\n",ifr.ifr_ifindex);
    
        // 指定使用的协议,并绑定
        //bind to all enabled can interface
        addr.can_family = AF_CAN;
        addr.can_ifindex =0;
        bind(s,(struct sockaddr*)&addr,sizeof(addr));
    
        // 获取数据
        nbytes = recvfrom(s,&frame,sizeof(struct can_frame),0,(struct sockaddr *)&addr,&len);
        
        /*get interface name of the received CAN frame*/
        ifr.ifr_ifindex = addr.can_ifindex;
        ioctl(s,SIOCGIFNAME,&ifr);
        printf("Received a CAN frame from interface %s\n",ifr.ifr_name);
        printf("frame message\n"
            "--can_id = %x\n"
            "--can_dlc = %x\n"
            "--data = %s\n",frame.can_id,frame.can_dlc,frame.data);
    
        return 0;
    }
    

 

目录
相关文章
|
7月前
|
IDE Linux 开发工具
如何在Linux运行RStudio Server并实现Web浏览器远程访问
如何在Linux运行RStudio Server并实现Web浏览器远程访问
226 0
|
5月前
|
存储 Linux
linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
89 1
|
6月前
|
监控 Linux BI
【linux服务器系统盘爆满】/www/server/total/logs/目录内容过多导致服务器系统盘爆满,/www/server/total/logs/ 里是什么内容?是否可以删除?
【linux服务器系统盘爆满】/www/server/total/logs/目录内容过多导致服务器系统盘爆满,/www/server/total/logs/ 里是什么内容?是否可以删除?
114 1
|
7月前
|
Linux 网络安全
xmanager 4 连接SuSE linux server 11方法
xmanager 4 连接SuSE linux server 11方法
46 1
|
7月前
|
弹性计算 负载均衡 网络协议
LVS (Linux Virtual server)集群介绍
LVS (Linux Virtual server)集群介绍
|
7月前
|
关系型数据库 MySQL Linux
Linux联网安装MySQL Server
Linux联网安装MySQL Server
122 0
|
7月前
|
Oracle 关系型数据库 Linux
SuSE linux server 11通过SAP来安装oracle11g
SuSE linux server 11通过SAP来安装oracle11g
105 0
|
7月前
|
存储 Linux 应用服务中间件
VMware安装无GUI版本的Linux(CentOS7)——安装Nginx示例demo
VMware安装无GUI版本的Linux(CentOS7)——安装Nginx示例demo
191 1
|
7月前
|
监控 Linux
linux实现守护进程demo
linux实现守护进程demo
43 0
|
7月前
|
分布式计算 安全 网络协议
Linux【问题记录 04】SSH突然无法连接排查2个小时最终解决Failed to start OpenSSH server daemon及阿里云服务器的 kdevtmpfsi 挖矿病毒处理
Linux【问题记录 04】SSH突然无法连接排查2个小时最终解决Failed to start OpenSSH server daemon及阿里云服务器的 kdevtmpfsi 挖矿病毒处理
525 0