0229-UDP 发送和接收

环境

  • Time 2022-11-25
  • WSL-Ubuntu 22.04
  • Rust 1.65.0

前言

说明

参考:https://doc.rust-lang.org/std/net/struct.UdpSocket.html

目标

之前通过接收整个 IP 和 UDP 报文来实现了通信,这里去除报文头的细节,直接通信。

main.rs

UDP 由标准库直接支持,可以直接使用。
将发送过来的信息进行反转,然后发送回去。

use std::net::UdpSocket;

fn main() -> std::io::Result<()> {
    let socket = UdpSocket::bind("127.0.0.1:4444")?;

    loop {
        let mut buffer = [0; 1500];
        let (size, src) = socket.recv_from(&mut buffer)?;

        let buffer = &mut buffer[..size];
        buffer.reverse();
        socket.send_to(buffer, src)?;
    }
}

发送请求

root@jiangbo12490:~# nc -u 127.0.0.1 4444
jiangbo

obgnaijzhangsan

nasgnahz

TCPDUMP 抓包

root@jiangbo12490:~# tcpdump -A -n -i lo port 4444
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes

21:48:11.282710 IP 127.0.0.1.50799 > 127.0.0.1.4444: UDP, length 8
E..$.*@.@............o.\...#jiangbo

21:48:11.282772 IP 127.0.0.1.4444 > 127.0.0.1.50799: UDP, length 8
E..$..@.@.L..........\.o...#
obgnaij
21:48:15.867097 IP 127.0.0.1.50799 > 127.0.0.1.4444: UDP, length 9
E..%.+@.@............o.\...$zhangsan

21:48:15.867157 IP 127.0.0.1.4444 > 127.0.0.1.50799: UDP, length 9
E..%..@.@.K..........\.o...$
nasgnahz

总结

使用 Rust 的标准库,实现 UDP 的通信。

附录

posted @ 2024-08-14 14:12  jiangbo4444  阅读(65)  评论(0)    收藏  举报