ncコマンドの場合、”-u”がUDPを指定している
$ nc -u -l 8888
$ echo “hoge” | nc -u 127.0.0.1 8888
use std::net::UdpSocket;
fn main() -> std::io::Result<()> {
{
let socket = UdpSocket::bind("127.0.0.1:8080")?;
let mut buf = [0; 100];
let (amt, src) = socket.recv_from(&mut buf)?;
let buf = &mut buf[..amt];
buf.reverse();
socket.send_to(buf, &src)?;
}
Ok(())
}
$ echo “hoge” | nc -u 127.0.0.1 8080
egoh
UDPのbindはできるけど、レスポンスが何かおかしい…
use std::net::UdpSocket;
use std::thread;
use std::str;
fn main() -> std::io::Result<()> {
{
let socket = UdpSocket::bind("127.0.0.1:8080")?;
let mut buf = [0; 2048];
loop {
match socket.recv_from(&mut buf) {
Ok((buf_size, src_addr)) => {
thread::spawn(move || {
let buf = &mut buf[..buf_size];
let req_msg = str::from_utf8(&buf).unwrap();
println!("request message: {:?}", req_msg);
});
},
Err(e) => {
println!("couldn't receive request: {:?}", e);
}
}
}
}
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.63s
Running `target/debug/app`
request message: “hoge\n”
なるほど、TCPだけでなく、UDPも割と簡単にできるのね。。音声、動画streamingはUDPが優れているが…