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が優れているが…