/***********************************************************************
* 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),,(struct sockaddr*)&addr,sizeof(addr)); return ;
} 二、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 =;
bind(s,(struct sockaddr*)&addr,sizeof(addr)); // 获取数据
nbytes = recvfrom(s,&frame,sizeof(struct can_frame),,(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 ;
}

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. ZOJ 1074 最大子矩阵和

    Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...

  2. esp8266的STM32驱动

    esp8266的STM32驱动,数据发送接收由DMA完成,释放CPU. 目前只能发送返回消息为成功或失败的AT命令,并判断是否成功,详见esp8266_cmd():其它返回消息不可预知的命令(如查看A ...

  3. ubuntu 设置显示器的亮度

    ubuntu电脑重新启动后,亮度都变成了最亮.似乎也没胡地方可以设置.只好通过写个脚本来做这个事了. # -*- coding: utf-8 -*- import dbus bus = dbus.Se ...

  4. 十八、mysql 内存优化 之 myisam

    .key_buffer 索引块大小 set global hot_cache.key_buffer_size = ; //设置大小 show variables like 'key_buffer_si ...

  5. Java Timer, TimerTask

    参考:http://batitan.iteye.com/blog/253483 TimerTask 就是一个run 方法,里边有些操作: Timer 是个线程,按各种调度方法(Timer.schedu ...

  6. GodSon Easyui 结合Pluplaod插件的文件分割上传

    自己整理了一个文件分割上传的实例,提供研究学习使用. 在线查看效果       下载该资源pluplaod文件分割上传Demo.zip 简介: 首先,进入页面会看到下面的效果: 点击一个按钮,出现如图 ...

  7. PD 脚本中列名注释用Name属性

    操作步骤:Database=>Generate Datatabase=>Format选项卡=>勾选 Generate name in empty comment项

  8. 设计模式之:组合模式(Composite)

    支持原创:http://blog.csdn.net/hguisu/article/details/7530783 设计模式(七)组合模式Composite(结构型) 1. 概述 在数据结构里面,树结构 ...

  9. 基于jquery中children()与find()的区别介绍

    本篇文章介绍了,基于jquery中children()与find()的区别,需要的朋友参考下 .children(selector) 方法是返回匹配元素集合中每个元素的所有子元素(仅儿子辈).参数可选 ...

  10. POJ2739Sum of Consecutive Prime Numbers

    http://poj.org/problem?id=2739 题意 :一个正整数能够表示为一个或多个连续素数和,给你一个正整数,让你求,有多少个这样的表示.例如:整数53有两种表示方法,5+7+11+ ...