ADd client and README
This commit is contained in:
parent
cda9d2e2a3
commit
1b4d5f0eef
3 changed files with 75 additions and 3 deletions
32
problem_04/README.md
Normal file
32
problem_04/README.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
## Usage
|
||||
|
||||
### Star the server
|
||||
```bash
|
||||
$ cargo run --bin server
|
||||
```
|
||||
|
||||
or with logs:
|
||||
|
||||
```bash
|
||||
$ RUST_LOG=info cargo run --bin server
|
||||
```
|
||||
|
||||
### Test with the client
|
||||
|
||||
```bash
|
||||
$ cargo run --bin client 127.0.0.1:1222 "foo=bar"
|
||||
```
|
||||
|
||||
## Example output
|
||||
|
||||
```bash
|
||||
$ cargo run --bin client 127.0.0.1:1222 "foo=bar"
|
||||
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
|
||||
Running `target/debug/client '127.0.0.1:1222' foo=bar`
|
||||
Insert request sent. No response expected.
|
||||
|
||||
$ cargo run --bin client 127.0.0.1:1222 "foo"
|
||||
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
|
||||
Running `target/debug/client '127.0.0.1:1222' foo`
|
||||
Received response: foo=bar
|
||||
```
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
use std::env;
|
||||
use std::error::Error;
|
||||
use std::net::SocketAddr;
|
||||
use std::time::Duration;
|
||||
use tokio::net::UdpSocket;
|
||||
|
||||
const MAX_DATAGRAM_SIZE: usize = 1000;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn Error>> {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
|
||||
if args.len() < 3 {
|
||||
println!("Usage: {} <server-ip:port> <request>", args[0]);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let server_addr: SocketAddr = args[1].parse()?;
|
||||
let request = args[2].clone();
|
||||
|
||||
let local_addr = if server_addr.is_ipv4() {
|
||||
"0.0.0.0:0"
|
||||
} else {
|
||||
"[::]:0"
|
||||
};
|
||||
|
||||
let socket = UdpSocket::bind(local_addr).await?;
|
||||
socket.connect(server_addr).await?;
|
||||
|
||||
socket.send(request.as_bytes()).await?;
|
||||
|
||||
if request.contains('=') {
|
||||
println!("Insert request sent. No response expected.");
|
||||
} else {
|
||||
let mut buf = vec![0; MAX_DATAGRAM_SIZE];
|
||||
let _ = tokio::time::timeout(Duration::from_secs(1), socket.recv(&mut buf)).await?;
|
||||
|
||||
let response = String::from_utf8_lossy(&buf);
|
||||
println!("Received response: {}", response);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
||||
Loading…
Reference in a new issue