车载以太网网络测试 -23【TCPUDP通信示例】

1 摘要

在车载通信场景中,TCP以及UDP的通信可以用于多种应用,例如车辆状态监控、远程控制、数据采集等。以下是详细的代码示例,展示了如何使用Python实现简单的TCP客户端与服务端通信以及简单的UDP客户端与服务端通信,并模拟了车载整车数据上传场景。

2 整车数据上传TCP通信

2.1 整车数据上传需求简述

在车载通信场景中,整车数据上传是指车辆将其实时状态信息(如车速、发动机转速、电池状态、GPS位置等)通过TCP协议发送到远程服务器。服务器接收这些数据后,可以进行实时监控、数据分析、故障诊断等操作。为了保证数据的实时性和可靠性,通常使用TCP协议进行通信。

2.2 TCP代码示例

以下是一个简单的TCP客户端与服务端的代码示例,模拟整车数据上传的场景。客户端(车载控制器,如GW)将模拟的整车数据发送到服务端(远程服务器),服务端接收并处理这些数据。

2.2.1 服务端代码(接收车辆数据)

import socketdef start_server(host='0.0.0.0', port=65432):# 创建TCP套接字with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:# 绑定IP和端口server_socket.bind((host, port))# 监听连接server_socket.listen()print(f"Server listening on {host}:{port}")while True:# 接受客户端连接client_socket, client_address = server_socket.accept()with client_socket:print(f"Connected by {client_address}")while True:# 接收数据data = client_socket.recv(1024)if not data:break# 处理数据print(f"Received data: {data.decode('utf-8')}")# 发送确认消息client_socket.sendall(b"Data received")if __name__ == "__main__":start_server()

代码说明:

  1. 创建一个TCP套接字,并绑定到指定的IP地址和端口。
  2. 监听客户端的连接请求。
  3. 当客户端连接成功后,接收客户端发送的数据,并打印到控制台。
  4. 向客户端发送确认消息,表示数据已接收。

2.2.2 客户端代码(发送车辆数据)

import socket
import timedef send_vehicle_data(host='127.0.0.1', port=65432):# 创建TCP套接字with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:# 连接到服务器client_socket.connect((host, port))print(f"Connected to server at {host}:{port}")while True:# 模拟整车数据vehicle_data = {"speed": 60,  # 车速"rpm": 2000,  # 发动机转速"battery_level": 80,  # 电池电量"gps": "37.7749,-122.4194"  # GPS位置}# 将数据转换为字符串并发送data_str = str(vehicle_data)client_socket.sendall(data_str.encode('utf-8'))print(f"Sent data: {data_str}")# 接收服务器确认response = client_socket.recv(1024)print(f"Server response: {response.decode('utf-8')}")# 等待一段时间后再次发送数据time.sleep(5)if __name__ == "__main__":send_vehicle_data()

代码说明:

  1. 创建一个TCP套接字,并连接到服务器。
  2. 模拟整车数据(如车速、发动机转速、电池状态、GPS位置等),并将其转换为字符串格式。
  3. 将数据发送到服务器,并等待服务器的确认消息。
  4. 每隔5秒发送一次数据。

2.2.3 代码输出说明

  • 服务端输出

    `Server listening on 0.0.0.0:65432`:表示服务器已启动并正在监听指定端口。
    `Connected by ('127.0.0.1', 12345)`:表示客户端已成功连接到服务器。
    `Received data: {'speed': 60, 'rpm': 2000, 'battery_level': 80, 'gps': '37.7749,-122.4194'}`:表示服务器已接收到客户端发送的整车数据。
    ...
    
  • 客户端输出

    `Connected to server at 127.0.0.1:65432`:表示客户端已成功连接到服务器。
    `Sent data: {'speed': 60, 'rpm': 2000, 'battery_level': 80, 'gps': '37.7749,-122.4194'}`:表示客户端已发送整车数据。
    `Server response: Data received`:表示服务器已确认接收到数据。
    ...
    

通过上述代码示例,我们实现了一个简单的TCP通信场景,模拟了整车数据上传的过程。服务端接收并处理客户端发送的数据,客户端定期发送模拟的整车数据。

2.3 UDP代码示例

在车载通信场景中,UDP(用户数据报协议)是一种常用的传输协议,特别是在需要低延迟和高吞吐量的场景中。UDP 是一种无连接的协议,适用于实时数据传输,如车辆传感器数据的实时上传。

2.3.1 服务端代码(接收车辆数据)

import socketdef start_server(host='0.0.0.0', port=5005):# 创建 UDP socketserver_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定地址和端口server_socket.bind((host, port))print(f"Server started on {host}:{port}")while True:# 接收数据data, addr = server_socket.recvfrom(1024)  # 缓冲区大小为1024字节print(f"Received data from {addr}: {data.decode('utf-8')}")if __name__ == "__main__":start_server()

代码说明

  1. 创建了一个 UDP socket,并绑定到指定的地址和端口。
  2. 使用 recvfrom 方法接收来自客户端的数据,并打印接收到的数据和客户端地址。
  3. 服务端持续运行,等待接收数据。

2.3.2 客户端代码(发送车辆数据)

import socket
import timedef send_data(host='127.0.0.1', port=5005):# 创建 UDP socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 模拟车辆数据vehicle_data = {'speed': 60,  # 速度'latitude': 34.0522,  # 纬度'longitude': -118.2437,  # 经度'temperature': 25  # 温度}while True:# 将数据转换为字符串并发送data = str(vehicle_data).encode('utf-8')client_socket.sendto(data, (host, port))print(f"Sent data to {host}:{port}: {data.decode('utf-8')}")time.sleep(1)  # 每隔1秒发送一次数据if __name__ == "__main__":send_data()

代码说明

  1. 创建了一个 UDP socket,并连接到指定的服务器地址和端口。
  2. 模拟车辆数据(如速度、位置、温度等),并将数据转换为字符串格式。
  3. 使用 sendto 方法将数据发送到服务器,并打印发送的数据。
  4. 客户端每隔1秒发送一次数据。

2.3.3 代码输出说明

  • 服务端输出

    Server started on 0.0.0.0:5005
    Received data from ('127.0.0.1', 12345): {'speed': 60, 'latitude': 34.0522, 'longitude': -118.2437, 'temperature': 25}
    Received data from ('127.0.0.1', 12345): {'speed': 60, 'latitude': 34.0522, 'longitude': -118.2437, 'temperature': 25}
    ...
    

    服务端会持续打印接收到的车辆数据,包括速度、位置、温度等信息。

  • 客户端输出

    Sent data to 127.0.0.1:5005: {'speed': 60, 'latitude': 34.0522, 'longitude': -118.2437, 'temperature': 25}
    Sent data to 127.0.0.1:5005: {'speed': 60, 'latitude': 34.0522, 'longitude': -118.2437, 'temperature': 25}
    ...
    

    客户端会持续打印发送的车辆数据,并每隔1秒发送一次。

该代码示例展示了如何使用 UDP 协议在车载通信场景中实现客户端与服务端的数据传输。UDP 的低延迟和高吞吐量特性使其非常适合实时数据传输场景,如车辆传感器数据的上传。然而,由于 UDP 不保证数据的可靠性和顺序,因此在实际应用中可能需要额外的容错机制来确保数据的完整性和准确性。

3 总结

以上是基于整车数据上传需求,设计了TCP&UDP客户端与服务端通信流程的代码示例;希望对大家学习车载以太网TCP&UDP通信有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot大学生竞赛管理系统设计与实现

一个用于管理大学生竞赛报名、信息查询与竞赛管理的系统,采用了现代化的SpringBoot框架进行开发。该系统的主要功能包括学生信息管理、教师信息管理、竞赛报名审核、竞赛信息管理等模块,适用于学校或教育机构进行竞赛活动的组织与管理。系统界面简洁&…

深入解析libsunrpc:构建分布式系统的核心RPC库

深入解析libsunrpc:构建分布式系统的核心RPC库 引言 在分布式系统开发中,远程过程调用(Remote Procedure Call, RPC) 是连接不同节点、实现跨网络服务调用的关键技术。作为SUN公司开源的经典RPC实现,libsunrpc 凭借其…

MinIO搭建部署

1、命令行安装 访问monio官网下载应用程序 # wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20250228095516.0.0-1.x86_64.rpm -O minio.rpm # sudo dnf install minio.rpm # mkdir ~/minio # minio server ~/minio --console-address :90012、dock…

Linux修改SSH端口号

我这里那RedHat系列的操作系统举例,修改SSH端口号 修改SSH配置文件:/etc/ssh/sshd_config,将端口号修改为2222.vim /etc/ssh/sshd_config重启SSH服务systemctl restart sshd# 如果是比较旧的OS,使用下面的命令重启 service ssh restart验证端口更改是否成功netstat -tulnp …

【嵌入式Linux】基于ArmLinux的智能垃圾分类系统项目

目录 1. 功能需求2. Python基础2.1 特点2.2 Python基础知识2.3 dict嵌套简单说明 3. C语言调用Python3.1 搭建编译环境3.2 直接调用python语句3.3 调用无参python函数3.4 调用有参python函数 4. 阿里云垃圾识别方案4.1 接入阿里云4.2 C语言调用阿里云Python接口 5. 香橙派使用摄…

【商城实战(63)】配送区域与运费设置全解析

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配&#xf…

字节跳动实习生主导开发强化学习算法,助力大语言模型性能突破

目录 禹棋赢的背景与成就 主要成就 DAPO算法的技术细节 算法优势 禹棋赢的研究历程 关键时间节点 字节跳动的“Top Seed人才计划” 计划特点 小编总结 在大模型时代,经验不再是唯一的衡量标准,好奇心、执行力和对新技术的敏锐洞察力成为推动技术…

Rust + 时序数据库 TDengine:打造高性能时序数据处理利器

引言:为什么选择 TDengine 与 Rust? TDengine 是一款专为物联网、车联网、工业互联网等时序数据场景优化设计的开源时序数据库,支持高并发写入、高效查询及流式计算,通过“一个数据采集点一张表”与“超级表”的概念显著提升性能…

使用LangChain实现基于LLM和RAG的PDF问答系统

目录 前言一.大语言模型(LLM)1. 什么是LLM?2. LLM 的能力与特点 二、增强检索生成(RAG)三. 什么是 LangChain?1. LangChain 的核心功能2. LangChain 的优势3. LangChain 的应用场景4. 总结 四.使用 LangChain 实现基于 PDF 的问答系统 前言 本文将介绍 …

群核科技持续亏损近18亿:营销费用偏高,市场份额优势面临挑战

《港湾商业观察》施子夫 2025年开年,DeepSeek的爆火让大众将目光聚焦到了“杭州六小龙”。其中,杭州群核信息技术有限公司(以下简称,群核科技)因系“六小龙”中首家启动上市的公司而被外界更多关注。 在此次递表港交…

java版嘎嘎快充玉阳软件互联互通中电联云快充协议充电桩铁塔协议汽车单车一体充电系统源码uniapp

演示: 微信小程序:嘎嘎快充 http://server.s34.cn:1888/ 系统管理员 admin/123456 运营管理员 yyadmin/Yyadmin2024 运营商 operator/operator2024 系统特色: 多商户、汽车单车一体、互联互通、移动管理端(开发中) 另…

音视频学习(三十):fmp4

FMP4(Fragmented MP4)是 MP4(MPEG-4 Part 14)的扩展版本,它支持流式传输,并被广泛应用于DASH(Dynamic Adaptive Streaming over HTTP)和HLS(HTTP Live Streaming&#xf…

26考研——图_图的存储(6)

408答疑 文章目录 二、图的存储图的存储相关概念邻接矩阵存储方式邻接矩阵的定义顶点的度计算邻接矩阵的特点邻接矩阵的局限性 应用场景邻接矩阵的幂次意义(了解即可) 邻接表存储方式邻接表定义邻接表结构邻接表的特点 邻接矩阵和邻接表的适用性差异十字…

以高斯(GaussDB) 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤

以下是使用 Windows 命令行(cmd) 操作 GaussDB(以 GaussDB(for openGauss) 社区版为例) 的详细步骤,涵盖 连接数据库、基本操作、关闭数据库 的全流程: 1. 环境准备 前提条件: 安装 GaussDB&a…

HAL库定时器配置

定时器的开启需要手动开启,例如在driver_capature.c开启,该文件主要写了具体的函数实现,与driver_can.c一样,同时还有回调函数等一些高级的自定义函数。 这段代码是 STM32 HAL 库中用于初始化 定时器 2 (TIM2) 的函数 MX_TIM2_In…

使用Python开发自动驾驶技术:车道线检测模型

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…

Modern C++面试题及参考答案

目录 解释右值引用的定义及其与左值引用的核心区别 std::move 的实现原理是什么?为什么它本身不执行移动操作? 移动构造函数与拷贝构造函数的调用场景有何不同? 实现一个支持移动语义的类需要遵循哪些原则? 完美转发(Perfect Forwarding)的实现原理及 std::forward 的…

Thinkphp(TP)框架漏洞攻略

1.环境搭建 vulhub/thinkphp/5-rce docker-compose up -d 2.访问靶场 远程命令执行: ? sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1] []whoami 远程代码执行: ? s/Index/\think\app/invokefunc…

QT笔记---JSON

QT笔记---JSON JSON1、JSON基本概念1.1、判断.json文件工具 2、生成.json数据3、解析.json数据 JSON 在现代软件开发中,数据的交换和存储格式至关重要。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁易…

Unity 使用 Protobuf(Pb2)二进制数据全流程工具详解

前言 在Unity游戏开发中,高效、快速、安全地读取配置数据是一项重要需求。本文介绍一种完整的解决方案——使用Protobuf二进制格式(Pb2)存储和读取游戏数据,并详细分享实现全流程的Unity工具。 一、技术流程概览 实现Unity读取…