Linux SocketCan client server demo hacking

/***********************************************************************
 *           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;
    }
    

 

时间: 2024-08-02 03:33:11

Linux SocketCan client server demo hacking的相关文章

linux SPI bus demo hacking

/********************************************************************** * linux SPI bus demo hacking * 说明: * 本文主要解析linux应用程序如何使用SPI总线和设备通信. * * 2016-3-28 深圳 南山平山村 曾剑锋 *********************************************************************/ // 参考文档: //

linux watchdog demo hacking

/********************************************************************** * linux watchdog demo hacking * 说明: * 本文主要解析linux watchdog大概应该如何操作. * * 2016-3-28 深圳 南山平山村 曾剑锋 *********************************************************************/ #include <st

Linux搭建SVN server

一. SVN 简单介绍 Subversion(SVN) 是一个开源的版本号控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository) 中. 这个档案库非常像一个普通的文件server, 只是它会记住每一次文件的变动. 这样你就能够把档案恢复到旧的版本号, 或是浏览文件的变动历史. SVN中的一些概念 : (1). repository(源码库) 源码统一存放的地方 (2). Checkout (提取) 当你手上没有源码的时候,

Java 在Client/Server 网络中的应用 (转)

client|server|网络 Java 在Client/Server 网络中的应用 (作者: 2000年08月09日 10:19) 随着Java语言的日益流行,特别是Java与Internet Web的密切结合,使它在全球取得了巨大的成功.Java语言以其独立于平台.面向对象.分布式.多线索及完善的安全机制等特色,成为现代信息系统建设中的良好的开发平台和运行环境. 一.Java网络应用模型 和Internet上的许多环境一样,完整的Java应用环境实际上也是一个客户机/服务器环境,更确切地说

用vfp与sql server构建Client/Server应用程序(SPT)(1)

一些题外话 最近有一种好的现象--越来越多的Visual FoxPro用户开始注意到Client/Server应用程序的重要性,他们开始安装SQL Server了.作为开发人员,我们没有必要深入认识SQL Server的种种(我个人以为那是数据库管理员-DBA的事情),我们要解决的是怎样使Visual FoxPro与SQL Server在一起顺利的运行,怎样发挥两者的优越特性. "远程视图"一章已经涉及到了许多深层次的问题,但遗憾的是(可能是文章太过枯燥)很少有人关注它!笔者到现在还是

用vfp与sql server构建Client/Server应用程序(远程视图)(4)

缓冲(Buffering) Visual FoxPro 中的缓冲技术 当远端数据下载到客户端时,这些数据就被压入缓冲之中.在客户端用户对数据的各种移动并不反映到数据源,而是在用户确认对数据的变动后,才把各种变动以SQL描述的形式发送到后端.那么为什么不让Visual FoxPro直接一步一动的操控远程数据,就像在不使用缓冲技术控制Visual FoxPro本地数据那样.我想原因在于: 在 Client/Server 构架的应用中,数据库服务器需要同时处理许多客户的请求,如果有一个客户"直接&qu

用vfp与sql server构建Client/Server应用程序(远程视图)(2)

通过工具建立连接 以上我们都是通过命令的方式建立连接,现在我们将使用Visual FoxPro提供的连接设计器建立连接.上文我们讲到:连接对象分为两类:"基于 DSN 的连接对象"和"基于字符串的连接对象".图5: 在连接设计器中选择"数据源.用户标识.密码"就说明在建立"基于 DSN 的连接对象",在"数据源"列表框中可选择当前可用的用户型.系统型 DSN. 在连接设计器中选择"连接串"

用vfp与sql server构建Client/Server应用程序(远程视图)(1)

本文是<用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序>系列的一部分,照例"远程视图"应不是开篇章节,但我们发现:在我们为网站准备的文章中有太多的理论性的东西,为了缓解这一矛盾,我们决定把"远程视图"提上来先写. 当下最流行的 ADO 脱胎于 Visual FoxPro,在实际使用中两者各有特色,所以不要小看 Visual FoxPro 在远程数据处理上的能力,它绝对强大!读者可以参看本站的<M

Oracle基于Client/Server的性能调整

摘要:通过探讨和研究Oracle服务器和Client/Server的特点和原理,阐述了提高.调整Oracle应用系 统性能的一些原则和方法. 关键词:Oracle:客户/服务器:系统全程区:网络I/O:回滚段. Oracle 数据库广泛应用在社会的各个领域,特别是在Client/Server模式的应用,但是应用开发者往 往碰到整个系统的性能随着数据量的增大显著下降的问题,为了解决这个问题,从以下几个方面:数据库 服务器.网络I/O.应用程序等对整个系统加以调整,充分发挥Oracle的效能,提高整