Advanced Java Day 6: Networking & Sockets

Goal of this Day

Today you will learn:

By the end, you will be able to write basic client-server applications in Java.

Step 1: TCP Client

Connect to a server using Socket and send data.


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

Socket socket = new Socket("localhost", 5000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

out.println("Hello Server!");
socket.close();

Step 2: TCP Server

Use ServerSocket to listen for connections.


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

ServerSocket server = new ServerSocket(5000);
System.out.println("Server started, waiting for client...");

Socket client = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

String message = in.readLine();
System.out.println("Received: " + message);

client.close();
server.close();

Step 3: Sending and Receiving Data

You can use PrintWriter and BufferedReader to send and receive messages.


PrintWriter out = new PrintWriter(client.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

out.println("Hello!");
String response = in.readLine();
System.out.println("Server says: " + response);

Practice


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

Socket socket = new Socket("localhost", 5000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello Server!");
socket.close();

Exercise

Build a basic client-server program where the server echoes messages.

Steps:

Example:


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

// Server
public class EchoServer {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(5000);
        System.out.println("Server started...");

        Socket client = server.accept();
        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter out = new PrintWriter(client.getOutputStream(), true);

        String message;
        while((message = in.readLine()) != null) {
            System.out.println("Received: " + message);
            out.println("Echo: " + message);
        }

        client.close();
        server.close();
    }
}

// Client
public class EchoClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 5000);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        out.println("Hello Server!");
        System.out.println(in.readLine());

        socket.close();
    }
}