こんにちは、MSKです。
今回はRustでUDP通信を行ってみたいと思います。
スポンサーリンク
関連記事
PythonでUDP通信をやってみよう!今回はUDP通信をPythonで行いたいと思います。
UDP通信の概要を解説して、実際にコードを書いて動作をみたいと思います。...
以前、PythonでUDPを通信をやってみました。
今回はRustでUDP通信を試してみます。
今回も簡単なプログラムを作成します。
受信側は受け取った文字列を表示するだけのプログラムで、送信側は入力された文字列をブロードキャストするようなプログラムです。
受信側プログラム
次のような処理を行っています。
- アドレスとポートを指定して、ソケットを開きます。
- メッセージの受信を待ちます。
- 受信したメッセージを表示します。
use std::net::{UdpSocket}; const RECV_ADDR: &str = "127.0.0.1:8080"; fn main() { { match UdpSocket::bind(RECV_ADDR) { Ok(sock) => { loop { let mut buff = [0;200]; match sock.recv_from(&mut buff) { Ok((recv_size, src)) => { println!("receive from {}",src); match String::from_utf8(buff[..recv_size].to_vec()) { Ok(v) => println!("receive message : {}",v), Err(v) =>println!("failed to convert to string from u8 array:{}",v), } }, Err(_) => println!("failed to receive message"), } } println!("stop receiver"); }, Err(v) => { println!("failed to start udp receiver:{}",v); } } } }
送信側プログラム
次に送信側のプログラムです。
次のような処理を行っています。
- アドレスとポートを指定してソケットを開きます。
- メッセージを標準入力から取得します。
- 送信先のアドレスとポートを指定してメッセージを送信します。
use std::net::{UdpSocket}; use std::{io}; const SENDER_ADDR:&str = "127.0.0.1:8081"; const BROADCAST_ADDR: &str = "255.255.255.255:8080"; fn main() { { match UdpSocket::bind(SENDER_ADDR) { Ok(sock) => { sock.set_broadcast(true).expect("failed to set broadcast"); loop { let mut input = String::new(); io::stdin().read_line(&mut input).expect("failed to get input"); match sock.send_to(input.as_bytes(), BROADCAST_ADDR) { Ok(v) => println!("send message : {}", &input[..v]), Err(v) => println!("failed to send message:{}",v), } } println!("stop sender"); }, Err(v) => println!("failed to start sender:{}",v), } } }
受信側を立ち上げて、送信側にメッセージを打つと受信側に送信側から送ったメッセージが表示されると思います。
最後に
TCP通信と同じであまり難しくなく、データ通信できました。
Rustではstd::netのUdpSocketを使って、ソケットを開き、このソケットに対して送受信を行うとデータ通信ができます。
最後までご覧いただき、ありがとうございます。
「RustでUDP通信を使おう!」でした。
スポンサーリンク