車載以太網網絡測試 -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.pswp.cn/web/73286.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73286.shtml
英文地址,請注明出處:http://en.pswp.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讀取…