aarambh-net 0.1.4

A library for HTTP, TCP, and UDP clients and servers
Documentation
# AarambhNet


AarambhNet is a Rust library providing networking capabilities with HTTP, TCP, and UDP support. This library aims to simplify the process of creating networking applications in Rust.

## Features


- **HTTP Client**: Easily make HTTP requests with support for custom headers and endpoints.
- **TCP Server/Client**: Set up TCP servers and clients to handle connection-based communication.
- **UDP Server/Client**: Implement lightweight UDP communication for fast, connectionless data transfer.
- 

## Installation


Add the following to your `Cargo.toml` file:

```toml
[dependencies]
aarambh-net = "0.1.4"
```

## Usage


### HTTP Client Example


    use aarambh_net::http::HttpClient;

    #[tokio::main]
    async fn main() {
        let base_url = "https://example.com";
        HttpClient::new(base_url, None).unwrap()
        let response = client.get("/endpoint", None).await.unwrap();
        println!("Response: {:?}", response);
    }

### TCP Server and Client Example


    use aarambh_net::tcp::{TcpServer, TcpClient};

    #[tokio::main]
    async fn main() {
        let addr = "127.0.0.1:8000";
        let server = TcpServer::bind(addr).await?;
        let server_task = tokio::spawn(async move {
            server.run().await.unwarp();
        });

        // Allow some time for the server to start
        tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;

        // Create a TCP client and send a message
        let mut client = TcpClient::connect(server_addr).await?;
        let message = "Hello, TCP Server!";
        client.send_message(message).await?;

        // Receive and print the response
        let response = client.receive_response().await?;
        println!("Received from server: {}", response);

        // Wait for user input to shut down the server
        println!("Press Enter to stop the server...");
        let mut input = String::new();
        io::stdin().read_line(&mut input).unwrap();

        // Shutdown the server
        server.shutdown().await;

        // Wait for the server task to complete
        let _ = server_task.await;

        Ok(())
    }

### UDP Server and Client Example


    use aarambh_net::udp::UdpClient;

    #[tokio::main]
    async fn main() {
        let server_addr = "127.0.0.1:8000";
        let server = Arc::new(UdpServer::bind(server_addr).await?);
        let server_task = {
            let server_clone = Arc::clone(&server);
            tokio::spawn(async move {
                server_clone.run().await.unwrap();
            })
        };

        tokio::time::sleep(Duration::from_secs(1)).await;

        let client_socket = UdpSocket::bind("127.0.0.1:0").await?;
        let message = b"Hello, UDP server!";

        client_socket.send_to(message, server_addr).await?;

        let mut buf = [0; 1024];
        match client_socket.recv_from(&mut buf).await {
            Ok((len, addr)) => {
                let response = String::from_utf8_lossy(&buf[..len]);
                assert_eq!(response, "Hello, UDP server!"); // Assert that the response matches the sent message
                println!("Received from {}: {}", addr, response);
            }
            Err(e) => {
                eprintln!("Failed to receive response: {}", e);
            }
        }

        // Shutdown the server
        server.shutdown().await;

        // Wait for the server task to complete
        let _ = server_task.await;

        Ok(())
    }


## Contributing

Contributions are welcome! Please open an issue or submit a pull request if you'd like to help improve the library.

## License


This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for more details.

## Donations


If you find this project useful and would like to support its continued development, you can make a donation via [Buy Me a Coffee](https://buymeacoffee.com/aarambhdevhub).

Thank you for your support!