1.SOCKET创建
int socketFd = socket(PF_CAN, SOCK_RAW, CAN_RAW);
2.sockaddr_can绑定
// 把socketCan0Addr绑定到socket上
bind(socketFd, (struct sockaddr *)&socketCan0Addr, sizeof(socketCan0Addr));
3.报文发送
使用write函数。
// 准备数据
frame.can_id = 0x610;
//扩展帧
frame.can_id |= CAN_EFF_FLAG;
frame.can_dlc = 8;
frame.data[0] = 0x40;
frame.data[1] = 0x01;
frame.data[2] = 0x10;
frame.data[3] = 0x00;
frame.data[4] = 0x00;
frame.data[5] = 0x00;
frame.data[6] = 0x00;
frame.data[7] = 0x00;
// 发送数据
nbytes = write(socketFd, &frame, sizeof(frame));
4.报文接收
使用read函数。
struct can_frame frame;
std::cout << "Info: read start...\n";
int nbytes = read(socket, &frame, sizeof(struct can_frame));
if (nbytes < 0)
{
std::cout << "Error: can raw socket read.\n";
return;
}

完整代码用例下载:六叶树SOCKETCAN编程 – 六叶树