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.
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}