首页 > 其他分享 >0212-使用 dummy 收发数据

0212-使用 dummy 收发数据

时间:2024-08-09 10:41:13浏览次数:16  
标签:dummy reader pnet 收发 0212 let linux channel

环境

  • Time 2022-11-20
  • WSL-Ubuntu 22.04
  • Rust 1.65.0
  • pnet 0.31.0

前言

说明

参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/linux

目标

前面使用了 pnet 发送了一个数据包,这里发送一个数据包,然后接收并显示出来。

接收数据

use pnet_datalink::{linux, Channel};

fn main() {
    let interfaces = linux::interfaces();

    let dummy: Vec<_> = interfaces
        .into_iter()
        .filter(|e| e.name == "mydummy")
        .collect();

    let config = linux::Config::default();
    let channel = linux::channel(&dummy[0], config);
    let (mut _sender, mut reader) = match channel {
        Ok(Channel::Ethernet(tx, rx)) => (tx, rx),
        _ => panic!("Not a valid channel returned"),
    };

    let bytes = reader.next().unwrap();
    dbg!(bytes);

    let string = String::from_utf8_lossy(bytes);
    println!("reader: {}", string)
}

发送数据

use pnet_datalink::{linux, Channel};

fn main() {
    let interfaces = linux::interfaces();

    let dummy: Vec<_> = interfaces
        .into_iter()
        .filter(|e| e.name == "mydummy")
        .collect();

    let config = linux::Config::default();
    let channel = linux::channel(&dummy[0], config);
    let (mut sender, mut _reader) = match channel {
        Ok(Channel::Ethernet(tx, rx)) => (tx, rx),
        _ => panic!("Not a valid channel returned"),
    };

    let buffer = String::from("hello, jiangbo");
    sender.send_to(buffer.as_bytes(), None).unwrap().unwrap();
}

tcpdump 的显示

21:09:17.441710 20:6a:69:61:6e:67 (oui Unknown) > 68:65:6c:6c:6f:2c (oui Unknown), ethertype Unknown (0x626f), length 14:

可以看到确实发送了一个数据包

reader 显示

reader: hello, jiangbo

总结

通过 dummy 和 pnet,实现了两个程序之间的数据交换。

附录

标签:dummy,reader,pnet,收发,0212,let,linux,channel
From: https://www.cnblogs.com/jiangbo4444/p/18350340

相关文章

  • XD6500S— LoRa SIP模块芯片 集成了射频前端和LoRa射频收发器SX1262 应用温湿度传感器
    XD6500S是一系列LoRaSIP模块,集成了射频前端和LoRa射频收发器SX1262系列,支持LoRa和FSK调制。收发器SX1262系列,支持LoRa和FSK调制。LoRa技术是一种扩频协议,针对LPWAN应用的低数据速率、超远距离和超低功耗通信进行了优化。通信进行了优化。XD6500S的主动接收电流消耗为4.2mA,电池寿......
  • 一帧CAN报文的收发流程
    一帧CAN报文的收发流程概述介绍总线通讯的文章有很多了,各种平台,CSDN\知乎、电子发烧友等等。扪心自问,你真的懂了吗?还是和大多数人一样,浅尝辄止,仅仅了解了一些分层的概念,就停滞不前了?附赠自动驾驶最全的学习资料和量产经验:链接认识事物的逻辑可不是这样的。autosar实......
  • 笔记:从Aurora 8b/10b 到Aurora 64b/66b (三):自定义PHY层收发
    相较于8/10来说没那么复杂,需要考虑的情况只有八种;但是gearbox的控制需要额外的心思:每三十二周期所有操作都需要停止;这一点在收发都需要注意;RX:核心思想是利用header做检测,将夹杂在数据流中的控制包滤除掉;modulegt_phy_rx(inputwirei_rx_clk......
  • 串行通信协议--UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器
    一、UART简介  UART广泛应用于微控制器和计算机之间的数据通信,如GPS模块、蓝牙模块、GSM模块等。UART是一种通用串行数据总线,用于异步通信,该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信UART通常被集成于其他通讯接口的连结上。UA......
  • vue连接mqtt实现收发消息组件超级详细
    vue连接mqtt实现收发消息组件超级详细基本概念:MQTT(MessageQueuingTelemetryTransport)是一种基于发布/订阅模式的轻量级消息传输协议,专为低带宽、高延迟或不稳定的网络环境设计。以下是MQTT实现收发消息的基本原理:客户端-服务器模型:MQTT基于客户端-服务器模型工作。客户......
  • 高速收发器(一)
    什么是高速收发器(GTX)FPGA中的通信协议分为低速协议和高速协议,常见的低速协议有UART、SPI、I2C等,这些协议的通信速率较低使用FPGA内部逻辑就可以实现;常见的高速协议有PCIe、以太网、Auraro、SRIO等协议,利用FPGA内部的时钟、LUT是无法实现的,假如线速度为1G,则FPGA内部需要跑到1G......
  • RK3568之修改8250驱动实现RS485收发的自动切换
    最近项目需求,要用到RK3568搭配自制底板。整个软硬件联调过程并不顺利,特立此系列帖,记录调试中发生的一些问题和解决办法。文章目录前言调试过程及问题解决办法1.硬件修改2.软件解决1.修改设备树文件2.查找设备树对应的串口驱动文件3.修改serial.h2.修改8250_dw.c2.修改......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-26 RS485串口程序收发环路设计
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1概述在前面的课程中,我......
  • 高速收发器:PHY层代码(二)
    TX:总结:不难,只需要注意小端发送即可;我选取的实现思路是使用VAILD信号计数,延迟几个周期之后启动发送计数器,发送计算器在其计数数值来到VAILD信号计数器的最大值-1后结束;思路很简单,事实上这就是一个很常见的组帧模块,和其他的没有什么本质的差别;always@(posedgei_sys_clk)......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-12 串口程序收发环路设计
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1概述前面两课,我们完成......