こんにちは、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通信を使おう!」でした。
スポンサーリンク
