大学の課題でソケット通信でオセロ対戦をするプログラムを書いていたのですが、Rust におけるソケット通信の仕様を理解するのに色々と苦労したので、メモしておきます。 ホスト名とポート番号を指定して、相手とデータのやり取りをする場合を考えます。 まず、IPアドレスに変換してくれる .to_socket_addrs() というメソッドがありますが、これによって変換されるアドレスは IPv4 だけでなく IPv6 とかの候補まで出してしまいます。相手側の実装にもよりますが、多分求めているのは IPv4 なので、.is_ipv4() というメソッドできちんと絞っておきましょう。 let host_and_port = format!("{}:{}", host, port); let mut addrs = host_and_port.to_socket_addrs().unwrap(); if l
![Rust で TCP/IP ソケット通信をする際のモデル - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/103750292960121c520bfcd342fb9f3c1b896519/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9UnVzdCUyMCVFMyU4MSVBNyUyMFRDUCUyRklQJTIwJUUzJTgyJUJEJUUzJTgyJUIxJUUzJTgzJTgzJUUzJTgzJTg4JUU5JTgwJTlBJUU0JUJGJUExJUUzJTgyJTkyJUUzJTgxJTk5JUUzJTgyJThCJUU5JTlBJTlCJUUzJTgxJUFFJUUzJTgzJUEyJUUzJTgzJTg3JUUzJTgzJUFCJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1kNWJiNzZiMTI4YWRmZDY0NTg3Yzg2ODE2N2ZjZDExOQ%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTcxNiZ0eHQ9JTQwSGVsbG9SdXNrJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzImdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1iZjhjY2I0MTQ1NWNmNzRlYjY4OGZiMjY5YzMwNTgyZg%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D19a0b520b4c19bcbd5643ced50bca224)