目录

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通信实战相关推荐

  1. Java中Socket通信-客户端与服务端相互传输对象数据

    场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...

  2. Java中Socket通信-客户端向服务端发送照片

    场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...

  3. delphi和 java通过socket通信的中文问题

    delphi和 java通过socket通信的中文问题 在delphi中把字符串转换下 Msg:=Utf8Encode(Msg); java中接收 java中用了mina public static ...

  4. 汽车CAN通信基础知识-数据类型(Java,C,JS之间转换)

    目录 1.Java中int或long类型和HEX转换 1.1int或long类型转换十六进制字符串格式说明 1.2HEX字符串转为int或者long类型值 2.Java中字节和比特位读取顺序理解 2. ...

  5. Java实现Socket通信

    前言:花了一个多星期的时间,重新学习了计算机网络中可靠数据传输的知识和TCP.UDP协议.在掌握了基本的理论后,想通过编程实践,来巩固和加深下对Socket通信的理解. 一 项目简介 1. 开发环境 ...

  6. Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)

    JAVA Socket简介 所谓socket 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答 ...

  7. Java中Socket通信-服务端和客户端双向传输字符串实现

    场景 什么是socket 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机 ...

  8. C++服务器与java进行socket通信案例

    注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyzhb/article/details/8047619 你可以学习,分享,修改,教学等.但是不得用于 ...

  9. java 半双工_(3)java网络socket通信---半双工、全双工

    (3)java网络---半双工.全双工 1.半双工 1.1半双工原理:半双工即Half duplex Communication,是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但只能有一 ...

最新文章

  1. 明年,我要用 AI 给全村写对联
  2. Metasploit save命令技巧
  3. mysql逻辑备份之mysqldump
  4. 中输入learn_Scikit-learn新版本发布,一行代码秒升级
  5. golang的reflection(转)(一)
  6. python的深造方向_自动化深造方向有哪些?
  7. mybatis--properties以及别名定义(四)
  8. vue 打印出git提交信息_VUE项目构建打包生成Git信息(VERSION和COMMITHASH文件)
  9. apache 访问控制
  10. sqlserver 中怎样查看一个数据库中表的关系
  11. (Python数字图像处理)自适应中值滤波算法
  12. “菁客”发布《2018中国移动社交招聘趋势报告》
  13. vivo X9的usb调试模式在哪里,开启vivo X9usb调试模式的方法
  14. [机缘参悟-8]:易经的核心思想(变与不变、天人合一)、核心概念(象、数、理、卦、爻、辞)、系统架构(层次模型)
  15. 文章标题一个应届计算机毕业生的2012求职之路
  16. 读书笔记数据科学入门————可视化数据
  17. 科技,美学,人性——交互设计的十字路口
  18. qgridlayout 滚动时固定第一行_固定轴承内外圈,哈尔滨轴承小编为您支几招!
  19. linux parted 方式挂盘,支持大于4T盘扩容
  20. 2016 HCTF web writeup

热门文章

  1. 2021-07-04——在线考试系统设计
  2. c代码实现 ifft运算_二维FFT,IFFT,c语言实现 | 学步园
  3. 常用测试工具和框架归类
  4. omap3530 linux串口驱动,omap3530(Cortex-A8)硬件平台软件调试笔记
  5. omap-l138烧写程序之 - 启动模式选择及确认
  6. 沙漠 草原 湖泊 羊群 骆驼(1)
  7. 关系型数据库和非关系型数据
  8. sendgrid html text,使用SendGrid发送电子邮件
  9. 一个arm64国产化工控机工程的移植总结
  10. TIDB集群搭建-流水线