feat: add rust-rawsock-demo,tokio-kcp-demo
This commit is contained in:
31
__network/tokio-kcp-demo/src/bin/client.rs
Normal file
31
__network/tokio-kcp-demo/src/bin/client.rs
Normal file
@@ -0,0 +1,31 @@
|
||||
use std::{net::SocketAddr, str};
|
||||
|
||||
use env_logger::Builder;
|
||||
use log::{info, LevelFilter};
|
||||
use tokio::io::{AsyncReadExt, AsyncWriteExt, stdin};
|
||||
use tokio_kcp::{KcpConfig, KcpStream};
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let mut builder = Builder::new();
|
||||
builder.filter_level(LevelFilter::Debug);
|
||||
builder.init();
|
||||
|
||||
let config = KcpConfig::default();
|
||||
|
||||
let server_addr = "127.0.0.1:3100".parse::<SocketAddr>().unwrap();
|
||||
|
||||
info!("connect to: {}", server_addr);
|
||||
let mut stream = KcpStream::connect(&config, server_addr).await.unwrap();
|
||||
info!("connected to server, please input...");
|
||||
|
||||
let mut buffer = [0u8; 8192];
|
||||
let mut i = stdin();
|
||||
loop {
|
||||
let n = i.read(&mut buffer).await.unwrap();
|
||||
stream.write_all(&buffer[..n]).await.unwrap();
|
||||
|
||||
let n = stream.read(&mut buffer).await.unwrap();
|
||||
println!("{}", unsafe { str::from_utf8_unchecked(&buffer[..n]) });
|
||||
}
|
||||
}
|
||||
47
__network/tokio-kcp-demo/src/bin/server.rs
Normal file
47
__network/tokio-kcp-demo/src/bin/server.rs
Normal file
@@ -0,0 +1,47 @@
|
||||
use std::{net::SocketAddr, time::Duration};
|
||||
|
||||
use byte_string::ByteStr;
|
||||
use env_logger::Builder;
|
||||
use log::{debug, error, info, LevelFilter};
|
||||
use tokio::{io::{AsyncReadExt, AsyncWriteExt}, time};
|
||||
use tokio_kcp::{KcpConfig, KcpListener};
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let mut builder = Builder::new();
|
||||
builder.filter_level(LevelFilter::Debug);
|
||||
builder.init();
|
||||
|
||||
let config = KcpConfig::default();
|
||||
|
||||
let server_addr = "127.0.0.1:3100".parse::<SocketAddr>().unwrap();
|
||||
info!("listen addr: {}", server_addr);
|
||||
let mut listener = KcpListener::bind(config, server_addr).await.unwrap();
|
||||
|
||||
loop {
|
||||
let (mut stream, peer_addr) = match listener.accept().await {
|
||||
Ok(s) => s,
|
||||
Err(err) => {
|
||||
error!("accept failed, error: {}", err);
|
||||
time::sleep(Duration::from_secs(1)).await;
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
info!("accepted {}", peer_addr);
|
||||
|
||||
tokio::spawn(async move {
|
||||
let mut buffer = [0u8; 8192];
|
||||
while let Ok(n) = stream.read(&mut buffer).await {
|
||||
debug!("recv {:?}", ByteStr::new(&buffer[..n]));
|
||||
if n == 0 {
|
||||
break;
|
||||
}
|
||||
stream.write_all(&buffer[..n]).await.unwrap();
|
||||
debug!("echo {:?}", ByteStr::new(&buffer[..n]));
|
||||
}
|
||||
|
||||
debug!("client {} closed", peer_addr);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user