Networking

networking2TcpSocket

Path
pkg10networking/networking2TcpSocket.java
Package
pkg10networking
Study order
2
Run
Single-file source launch
Command
java pkg10networking/networking2TcpSocket.java

There is no in-browser runner. This is the file from the curriculum, unchanged.

pkg10networking/networking2TcpSocket.java
1package pkg10networking;2 3import java.io.BufferedReader;4import java.io.InputStreamReader;5import java.io.PrintWriter;6import java.net.InetAddress;7import java.net.ServerSocket;8import java.net.Socket;9 10/*11 * networking2TcpSocket.java12 * -------------------------13 * TCP sockets: a reliable, ordered, connection-based byte stream.14 *15 * DEFINITION:16 *   ServerSocket listens for incoming connections; Socket is one endpoint of a17 *   connection. This demo runs BOTH server and client in one process over18 *   loopback, so it works fully offline.19 *20 * KEY POINTS:21 *   - Server: bind a port, accept() (blocks) -> get a Socket per client.22 *   - Client: new Socket(host, port) connects; then read/write its streams.23 *   - Bind port 0 to let the OS pick a free ephemeral port.24 *   - TCP guarantees delivery & order; for fire-and-forget use UDP (networking3).25 */26public class networking2TcpSocket {27 28    public static void main(String[] args) throws Exception {29        // Start a tiny echo server on an OS-chosen port, in a background thread30        ServerSocket server = new ServerSocket(0);   // 0 => ephemeral port31        int port = server.getLocalPort();32 33        Thread serverThread = new Thread(() -> {34            try (Socket client = server.accept();    // blocks until a client connects35                 BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));36                 PrintWriter out = new PrintWriter(client.getOutputStream(), true)) {37                String line = in.readLine();38                System.out.println("[server] received: " + line);39                out.println("ECHO: " + line);        // send a response40            } catch (Exception e) {41                System.out.println("[server] error: " + e.getMessage());42            }43        });44        serverThread.start();45 46        // Client connects to the server over loopback and exchanges one message47        try (Socket socket = new Socket(InetAddress.getLoopbackAddress(), port);48             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);49             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {50            System.out.println("[client] connected to port " + port);51            out.println("hello over TCP");52            System.out.println("[client] reply   : " + in.readLine());53        }54 55        serverThread.join();56        server.close();57        System.out.println("Done.");58    }59}