汽车CAN通信基础知识-Java之Socket通信实战
目录
1.理解JavaSocket通信原理
2.定义数据通信数据规则
3.实现Socket通信
3.1创建Socket并主动连接服务器
3.2通过OutpuStream写入数据给服务器
3.3起线程通过InputStream从服务器不断的读取数据流
3.4关闭资源
1.理解JavaSocket通信原理
https://blog.csdn.net/ahou2468/article/details/80353723
2.定义数据通信数据规则
以下是CAN数据的通信结构;
一个 TCP 或 UDP 帧包含若干个 CAN 帧(最多50个, 最少1个CAN帧);一个CAN帧是13个字节;
第一字节主要区分标准帧和扩展帧,远程帧和数据帧;
3.实现Socket通信
3.1创建Socket并主动连接服务器
注意要设置连接Server地址和端口,同时设置连接时间,超时则连接失败
//客户端模式private Socket socket;private InputStream inputStream; //输入流,用于从服务器获取数据private OutputStream outputStream;//输出流,用于写数据给服务器
//创建一个流套接字并将其连接到指定主机上的指定端口号。
// socket = new Socket(ipAddress_l, nWorkPort_l);socket = new Socket(); //实例化socketSocketAddress socketAddress = new InetSocketAddress(ipAddress_l, nWorkPort_l); //获取sockaddress对象socket.connect(socketAddress,15000); //连接socket并设置连接超时为5秒,如果5秒后服务端还没有响应,则弹出异常信息。outputStream = socket.getOutputStream();inputStream = socket.getInputStream();
3.2通过OutpuStream写入数据给服务器
将short(0-255)数据强制转换为byte(-128-127)类型,实际CAN设备C++Server接收byte数据属于无符号类型,实际接收数据是(0-255)
//组装实际数据,将short数据强制转换为byte
short[] msg = new short[13];
//将short数组转为byte数组
byte[] msgbyte = new byte[msg.length];
for(int i=0; i<msg.length;i++){msgbyte[i] = (byte)msg[i];
}
//写入数据
outputStream.write(msgbyte,0, msgbyte.length);
3.3起线程通过InputStream从服务器不断的读取数据流
/*** 监听接收数据*/private class FrmRecvRunnable implements Runnable{@Overridepublic void run() {int nCount = 0;while (!mPaused){try{if(mConnected){if(!socket.isConnected()){//通知设备已经断开连接return;}//1.接收数据缓冲区,每一帧数据为13字节byte[] buffer = new byte[13];int bytes;//2.不断循环接收数据while(true){//3.读数据,每次读取一帧数据,13字节bytes = inputStream.read(buffer);//, 0, 13);if(bytes > 0) {byte[] data = new byte[bytes];System.arraycopy(buffer, 0, data, 0, bytes);short[] msg = new short[13];//LeopaardCANCtrl.toShortArray(data);//4.根据自己需要将字节数据转换为short类型for(int i=0;i<bytes; i++){msg[i] = (short) (0x0FF&buffer[i]);}//5.根据数据需要将13字节数据转为需要的CAN数据LeopaardFrmData frmData = new LeopaardFrmData();LeopaardCANCtrl.canPack(frmData, msg, msg.length);sendDataToJS(frmData, 0); //0暂未使用
// Thread.sleep(2000);}}}}catch (Exception exception){//暂不处理}}}}
3.4关闭资源
//是否连接资源public boolean freeResouce(){//是否资源try{if(outputStream != null){outputStream.close();outputStream = null;}if(inputStream != null){inputStream.close();inputStream = null;}if(threadPool != null){threadPool.shutdown();threadPool = null;}if(socket != null){socket.close();socket = null;}return true;}catch (Exception exception){//暂不处理}return false;}
汽车CAN通信基础知识-Java之Socket通信实战相关推荐
- Java中Socket通信-客户端与服务端相互传输对象数据
场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...
- Java中Socket通信-客户端向服务端发送照片
场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...
- delphi和 java通过socket通信的中文问题
delphi和 java通过socket通信的中文问题 在delphi中把字符串转换下 Msg:=Utf8Encode(Msg); java中接收 java中用了mina public static ...
- 汽车CAN通信基础知识-数据类型(Java,C,JS之间转换)
目录 1.Java中int或long类型和HEX转换 1.1int或long类型转换十六进制字符串格式说明 1.2HEX字符串转为int或者long类型值 2.Java中字节和比特位读取顺序理解 2. ...
- Java实现Socket通信
前言:花了一个多星期的时间,重新学习了计算机网络中可靠数据传输的知识和TCP.UDP协议.在掌握了基本的理论后,想通过编程实践,来巩固和加深下对Socket通信的理解. 一 项目简介 1. 开发环境 ...
- Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
JAVA Socket简介 所谓socket 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答 ...
- Java中Socket通信-服务端和客户端双向传输字符串实现
场景 什么是socket 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机 ...
- C++服务器与java进行socket通信案例
注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyzhb/article/details/8047619 你可以学习,分享,修改,教学等.但是不得用于 ...
- java 半双工_(3)java网络socket通信---半双工、全双工
(3)java网络---半双工.全双工 1.半双工 1.1半双工原理:半双工即Half duplex Communication,是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但只能有一 ...
最新文章
- 明年,我要用 AI 给全村写对联
- Metasploit save命令技巧
- mysql逻辑备份之mysqldump
- 中输入learn_Scikit-learn新版本发布,一行代码秒升级
- golang的reflection(转)(一)
- python的深造方向_自动化深造方向有哪些?
- mybatis--properties以及别名定义(四)
- vue 打印出git提交信息_VUE项目构建打包生成Git信息(VERSION和COMMITHASH文件)
- apache 访问控制
- sqlserver 中怎样查看一个数据库中表的关系
- (Python数字图像处理)自适应中值滤波算法
- “菁客”发布《2018中国移动社交招聘趋势报告》
- vivo X9的usb调试模式在哪里,开启vivo X9usb调试模式的方法
- [机缘参悟-8]:易经的核心思想(变与不变、天人合一)、核心概念(象、数、理、卦、爻、辞)、系统架构(层次模型)
- 文章标题一个应届计算机毕业生的2012求职之路
- 读书笔记数据科学入门————可视化数据
- 科技,美学,人性——交互设计的十字路口
- qgridlayout 滚动时固定第一行_固定轴承内外圈,哈尔滨轴承小编为您支几招!
- linux parted 方式挂盘,支持大于4T盘扩容
- 2016 HCTF web writeup