1. /***********************************************************************
  2. * Linux SocketCan client server demo hacking
  3. * 说明:
  4. * 本文主要是解读Linux上的SocketCan的基本使用方法,内容和Linux上的
  5. * 网络编程差不多。
  6. *
  7. * 2016-3-28 深圳 南山平山村 曾剑锋
  8. **********************************************************************/
  9.  
  10. 一、cat client.c
  11. #include <sys/ioctl.h>
  12. #include <net/if.h>
  13. #include <linux/can.h>
  14.  
  15. #ifndef PF_CAN
  16. #define PF_CAN 29
  17. #endif
  18.  
  19. #ifndef AF_CAN
  20. #define AF_CAN PF_CAN
  21. #endif
  22.  
  23. int main()
  24. {
  25. int s;
  26. unsigned long nbytes;
  27. struct sockaddr_can addr;
  28. struct ifreq ifr;
  29. struct can_frame frame;
  30.  
  31. // 创建一个SocketCan
  32. s = socket(PF_CAN,SOCK_RAW,CAN_RAW);
  33.  
  34. // 设置一些参数,这个是使用的can网络的设备号
  35. strcpy((char *)(ifr.ifr_name),"can0");
  36. ioctl(s,SIOCGIFINDEX,&ifr);
  37. printf("can0 can_ifindex = %x\n",ifr.ifr_ifindex);
  38.  
  39. // 设置使用CAN协议
  40. addr.can_family = AF_CAN;
  41. addr.can_ifindex = ifr.ifr_ifindex;
  42. bind(s,(struct sockaddr*)&addr,sizeof(addr));
  43.  
  44. // 设置发送到的设备id
  45. frame.can_id = 0x123;
  46. strcpy((char *)frame.data,"hello");
  47. frame.can_dlc = strlen(frame.data);
  48.  
  49. printf("Send a CAN frame from interface %s\n",ifr.ifr_name);
  50.  
  51. // 发送数据
  52. nbytes = sendto(s,&frame,sizeof(struct can_frame),,(struct sockaddr*)&addr,sizeof(addr));
  53.  
  54. return ;
  55. }
  56.  
  57. 二、cat server.c
  58. #include <sys/ioctl.h>
  59. #include <net/if.h>
  60. #include <linux/can.h>
  61.  
  62. #ifndef PF_CAN
  63. #define PF_CAN 29
  64. #endif
  65.  
  66. #ifndef AF_CAN
  67. #define AF_CAN PF_CAN
  68. #endif
  69.  
  70. int main()
  71. {
  72. int s;
  73. unsigned long nbytes,len;
  74. struct sockaddr_can addr;
  75. struct ifreq ifr;
  76. struct can_frame frame;
  77.  
  78. // 创建一个SocketCan
  79. s = socket(PF_CAN,SOCK_RAW,CAN_RAW);
  80.  
  81. // 指定使用的Can网络
  82. strcpy(ifr.ifr_name,"can0");
  83. ioctl(s,SIOCGIFINDEX,&ifr);
  84. printf("can0 can_ifindex = %x\n",ifr.ifr_ifindex);
  85.  
  86. // 指定使用的协议,并绑定
  87. //bind to all enabled can interface
  88. addr.can_family = AF_CAN;
  89. addr.can_ifindex =;
  90. bind(s,(struct sockaddr*)&addr,sizeof(addr));
  91.  
  92. // 获取数据
  93. nbytes = recvfrom(s,&frame,sizeof(struct can_frame),,(struct sockaddr *)&addr,&len);
  94.  
  95. /*get interface name of the received CAN frame*/
  96. ifr.ifr_ifindex = addr.can_ifindex;
  97. ioctl(s,SIOCGIFNAME,&ifr);
  98. printf("Received a CAN frame from interface %s\n",ifr.ifr_name);
  99. printf("frame message\n"
  100. "--can_id = %x\n"
  101. "--can_dlc = %x\n"
  102. "--data = %s\n",frame.can_id,frame.can_dlc,frame.data);
  103.  
  104. return ;
  105. }

Linux SocketCan client server demo hacking的更多相关文章

  1. am335x Qt SocketCAN Demo hacking

    /*********************************************************************************** * am335x Qt Soc ...

  2. linux watchdog demo hacking

    /********************************************************************** * linux watchdog demo hackin ...

  3. linux SPI bus demo hacking

    /********************************************************************** * linux SPI bus demo hacking ...

  4. Linux socket program Demo1(client & server)

    client  and  server Demo of socket. client send data to server. server send data to client. // this ...

  5. C Socket Programming for Linux with a Server and Client Example Code

    Typically two processes communicate with each other on a single system through one of the following ...

  6. 深入浅出 Redis client/server交互流程

    综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...

  7. Network client/server

    <Beginning Linux Programming_4th>  chapter 15 Sockets 1  A simple local client/server 1)  clie ...

  8. Linux 搭建SVN server

    一. SVN 简单介绍 Subversion(SVN) 是一个开源的版本号控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository ...

  9. Linux下HTTP Server

    想在Linux下实现一个简单的web Server并不难.一个最简单的HTTP Server不过是一个高级的文件服务器,不断地接收客户端(浏览器)发送的HTTP请求,解析请求,处理请求,然后像客户端回 ...

随机推荐

  1. Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  2. sybase下convert函数第三个参数(时间格式)

    convert(varchar(10),字段名,转换格式) 比如:1.select user_id,convert(varchar(10),dayts,11) as dates from tb_use ...

  3. 在虚拟中开启Windows 8.1的Hyper-V平台

    VM安装windows8开启Hype-V 今天老魏用VM安装了Windows8.1系统,想用此系统来开发一下Windows Phone8,但是要求确实要开启Hyper-V平台技术,本来是没有任何的问题 ...

  4. Xcode常用快捷键及代码格式刷(缩进)方法-b

    Xcode版本:4.5.1 一.总结的常用命令: 隐藏xcode command+h 退出xcode command+q 关闭窗口 command+w 关闭所有窗口 command+option+w ...

  5. NSUserDefault 的使用(好东东,留着)

    1.NSUserDefault的使用: 作用:NSUserDefaults类提供了一个与默认系统进行交互的编程接口.NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等 ...

  6. 1074: [SCOI2007]折纸origami - BZOJ

    Description 桌上有一张边界平行于坐标轴的正方形纸片,左下角的坐标为(0,0),右上角的坐标为(100,100).接下来执行n条折纸命令.每条命令用两个不同点P1(x1,y1)和P2(x2, ...

  7. c++ string char* const char*

    #include <iostream> #include <string> #include <cstring> using namespace std; int ...

  8. ural 1108

    大数乘法    不会java   比赛的时候各种细节RE  WA  ........ #include <cstdio> #include <cstring> #include ...

  9. ppshu

    全部书籍已经下载完毕! http://3cvpkfx4gdnkcduj.onion/ https://3cvpkfx4gdnkcduj.onion.cab/ https://3cvpkfx4gdnkc ...

  10. Samza的ApplicationMaster

    当Samza ApplicationMaster启动时,它做以下的事情: 通过STREAMING_CONFIG环境变量从YARN获取配置信息(configuration) 在随机端口上 启动一个JMX ...