Example 2
This commit is contained in:
parent
bbc70431ef
commit
f991959997
52
src/main.rs
52
src/main.rs
|
@ -1,32 +1,42 @@
|
||||||
// Yeahbut December 2023
|
// Yeahbut December 2023
|
||||||
|
|
||||||
use tokio::io::copy_bidirectional;
|
|
||||||
use tokio::net::{TcpListener, TcpStream};
|
use tokio::net::{TcpListener, TcpStream};
|
||||||
|
use tokio::io;
|
||||||
use std::env;
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error>> {
|
async fn main() -> Result<(), Box<dyn Error>> {
|
||||||
let listen_addr = env::args()
|
let listener = TcpListener::bind("127.0.0.1:25565").await?;
|
||||||
.nth(1)
|
println!("Proxy listening on port 25565...");
|
||||||
.unwrap_or_else(|| "127.0.0.1:25565".to_string());
|
|
||||||
let server_addr = env::args()
|
|
||||||
.nth(2)
|
|
||||||
.unwrap_or_else(|| "127.0.0.1:25566".to_string());
|
|
||||||
|
|
||||||
println!("Listening on: {}", listen_addr);
|
while let Ok((client_socket, _)) = listener.accept().await {
|
||||||
println!("Proxying to: {}", server_addr);
|
tokio::spawn(handle_client(client_socket));
|
||||||
|
|
||||||
let listener = TcpListener::bind(listen_addr).await?;
|
|
||||||
|
|
||||||
while let Ok((mut inbound, _)) = listener.accept().await {
|
|
||||||
let mut outbound = TcpStream::connect(server_addr.clone()).await?;
|
|
||||||
|
|
||||||
tokio::spawn(async move {
|
|
||||||
copy_bidirectional(&mut inbound, &mut outbound).await
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn handle_client(client_socket: TcpStream) {
|
||||||
|
let backend_addr = "127.0.0.1:25566";
|
||||||
|
|
||||||
|
if let Ok(mut backend_socket) = TcpStream::connect(backend_addr).await {
|
||||||
|
let (mut client_reader, mut client_writer) = client_socket.into_split();
|
||||||
|
let (mut backend_reader, mut backend_writer) = backend_socket.into_split();
|
||||||
|
|
||||||
|
// Forward from client to backend
|
||||||
|
tokio::spawn(async move {
|
||||||
|
if let Err(e) = io::copy(&mut client_reader, &mut backend_writer).await {
|
||||||
|
eprintln!("Error copying from client to backend: {}", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Forward from backend to client
|
||||||
|
tokio::spawn(async move {
|
||||||
|
if let Err(e) = io::copy(&mut backend_reader, &mut client_writer).await {
|
||||||
|
eprintln!("Error copying from backend to client: {}", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
eprintln!("Failed to connect to the backend server");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue