Java Networking

Building network applications and client-server communication

🌐 What is Java Networking?

Java Networking enables applications to communicate over networks using sockets, URLs, and protocols. It provides APIs for creating client-server applications, web services, and distributed systems with reliable data exchange.


// Simple Socket Client
import java.io.*;
import java.net.*;

public class SimpleClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8080);
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
            
            out.println("Hello Server!");
            String response = in.readLine();
            System.out.println("Server says: " + response);
            
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
                                    

Output:

Server says: Hello Client! Message received.

Key Networking Concepts

🔌

Sockets

Endpoints for network communication

Socket client = new Socket("host", port);
ServerSocket server = new ServerSocket(port);
🌍

URL Connection

Connect to web resources

URL url = new URL("http://example.com");
URLConnection conn = url.openConnection();
📡

TCP/UDP

Reliable and fast protocols

// TCP: Socket, ServerSocket
// UDP: DatagramSocket, DatagramPacket
💬

Streams

Data input/output over network

InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();

🔹 TCP Socket Programming

Creating client-server applications with TCP sockets:

🔸 Server Side

import java.io.*;
import java.net.*;

public class TCPServer {
    public static void main(String[] args) {
        try {
            // Create server socket on port 8080
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("Server started on port 8080");
            
            while (true) {
                // Wait for client connection
                Socket clientSocket = serverSocket.accept();
                System.out.println("Client connected: " + clientSocket.getInetAddress());
                
                // Create input/output streams
                BufferedReader in = new BufferedReader(
                    new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(
                    clientSocket.getOutputStream(), true);
                
                // Read message from client
                String message = in.readLine();
                System.out.println("Received: " + message);
                
                // Send response to client
                out.println("Echo: " + message);
                
                // Close client connection
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

🔸 Client Side

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class TCPClient {
    public static void main(String[] args) {
        try {
            // Connect to server
            Socket socket = new Socket("localhost", 8080);
            System.out.println("Connected to server");
            
            // Create input/output streams
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
            
            // Get user input
            Scanner scanner = new Scanner(System.in);
            System.out.print("Enter message: ");
            String message = scanner.nextLine();
            
            // Send message to server
            out.println(message);
            
            // Read response from server
            String response = in.readLine();
            System.out.println("Server response: " + response);
            
            // Close connection
            socket.close();
            scanner.close();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

🔹 UDP Socket Programming

Fast, connectionless communication with UDP:

🔸 UDP Server

import java.net.*;

public class UDPServer {
    public static void main(String[] args) {
        try {
            // Create UDP socket
            DatagramSocket socket = new DatagramSocket(9876);
            byte[] buffer = new byte[1024];
            
            System.out.println("UDP Server started on port 9876");
            
            while (true) {
                // Receive packet from client
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
                socket.receive(packet);
                
                String message = new String(packet.getData(), 0, packet.getLength());
                System.out.println("Received: " + message);
                
                // Send response back to client
                String response = "Echo: " + message;
                byte[] responseData = response.getBytes();
                
                DatagramPacket responsePacket = new DatagramPacket(
                    responseData, responseData.length, 
                    packet.getAddress(), packet.getPort());
                
                socket.send(responsePacket);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

🔸 UDP Client

import java.net.*;
import java.util.Scanner;

public class UDPClient {
    public static void main(String[] args) {
        try {
            DatagramSocket socket = new DatagramSocket();
            InetAddress address = InetAddress.getByName("localhost");
            
            Scanner scanner = new Scanner(System.in);
            System.out.print("Enter message: ");
            String message = scanner.nextLine();
            
            // Send message to server
            byte[] data = message.getBytes();
            DatagramPacket packet = new DatagramPacket(
                data, data.length, address, 9876);
            socket.send(packet);
            
            // Receive response from server
            byte[] buffer = new byte[1024];
            DatagramPacket responsePacket = new DatagramPacket(buffer, buffer.length);
            socket.receive(responsePacket);
            
            String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
            System.out.println("Server response: " + response);
            
            socket.close();
            scanner.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

🔹 URL and HTTP Connections

Connecting to web resources and APIs:

import java.io.*;
import java.net.*;

public class URLExample {
    
    // Simple GET request
    public static void httpGet(String urlString) {
        try {
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            // Set request method
            connection.setRequestMethod("GET");
            connection.setRequestProperty("User-Agent", "Java Application");
            
            // Get response code
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);
            
            // Read response
            BufferedReader reader = new BufferedReader(
                new InputStreamReader(connection.getInputStream()));
            
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                response.append(line).append("\n");
            }
            reader.close();
            
            System.out.println("Response: " + response.toString());
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    // POST request with data
    public static void httpPost(String urlString, String postData) {
        try {
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            // Set request method and properties
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoOutput(true);
            
            // Send POST data
            OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
            writer.write(postData);
            writer.flush();
            writer.close();
            
            // Read response
            int responseCode = connection.getResponseCode();
            System.out.println("POST Response Code: " + responseCode);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        httpGet("https://api.github.com/users/octocat");
        httpPost("https://httpbin.org/post", "{\"name\":\"John\",\"age\":30}");
    }
}

🧠 Test Your Knowledge

Which class is used to create a TCP server in Java?