Advanced Programming with JavaUnit 97 min read
Network Programming in Java: Sockets, Clients, Servers, Protocols
Unit 9 of Advanced Programming with Java covers Java’s networking APIs (URL, Socket, ServerSocket), client-server architecture, TCP/UDP protocols, and real-world applications like eSewa’s secure transactions and Pathao’s ride-matching systems.
TAKEAWAYS:
- Java’s
Socket/ServerSocketclasses enable TCP communication, whileDatagramSockethandles UDP. - Client-server architecture separates logic: clients request services, servers provide them (e.g., WhatsApp servers route messages).
- Protocols (HTTP, FTP) define message formats and rules (e.g., HTTP uses
GET/POSTfor web requests). - Multithreading in servers handles concurrent clients (e.g., Ncell’s call routing uses threads per user).
- Firewalls and proxies can block or redirect traffic (e.g., NTC’s ISP rules filter packets).
- Java’s
URLclass simplifies web data fetching (e.g., Daraz’s product catalogs are fetched via HTTP).
1. Networking Basics in Java
Network programming allows Java applications to exchange data over networks. Java provides built-in classes for:
- TCP/IP: Reliable, connection-oriented communication (e.g., eSewa’s secure transactions).
- UDP: Faster, connectionless communication (e.g., online gaming voice chats).
Key Classes
| Class | Purpose | Example Use Case |
|---|---|---|
Socket |
Client-side TCP connection | Connecting to a bank’s server |
ServerSocket |
Server-side TCP listener | Ncell’s call routing server |
DatagramSocket |
UDP communication | Live sports score updates |
URL |
Fetching web data | Daraz’s product API calls |
2. TCP Client-Server Model
How it works:
- Server creates a
ServerSocketand waits for client connections. - Client creates a
Socketto connect to the server. - Data is exchanged via
InputStream/OutputStream.
Example: Echo Server/Client
// Server: EchoServer.java
ServerSocket server = new ServerSocket(1234);
Socket client = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
String input;
while ((input = in.readLine()) != null) {
out.println(input); // Echo back
}
client.close();
server.close();
// Client: EchoClient.java
Socket socket = new Socket("localhost", 1234);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("Hello, Server!");
String response = in.readLine(); // Receives "Hello, Server!"
socket.close();
Trace: Server Execution Steps
| Step | Action | State After Step |
|---|---|---|
| 1 | ServerSocket(1234) |
Listening on port 1234 |
| 2 | accept() |
Blocks until client connects |
| 3 | Client connects | Socket created, streams open |
| 4 | readLine() |
Waits for client input |
| 5 | Client sends "Hello" | Server echoes "Hello" back |
3. UDP Communication
UDP is faster but unreliable (no connection setup). Used for:
- Voice/video calls (Pathao’s driver-location updates).
- Live data feeds (NEPSE stock tickers).
Example: UDP Ping-Pong
// Sender: UDPClient.java
DatagramSocket socket = new DatagramSocket();
String message = "Ping";
byte[] buffer = message.getBytes();
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 9876);
socket.send(packet);
socket.close();
// Receiver: UDPServer.java
DatagramSocket socket = new DatagramSocket(9876);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Received: " + received);
socket.close();
4. Real-World Applications
In the Real World
- eSewa: Uses TCP sockets for secure financial transactions (HTTPS over
Socket). - Pathao: Uses UDP for real-time driver location updates (low latency).
- Ncell: Uses multithreaded servers to handle thousands of call routing requests simultaneously.
Example: Bank Loan Interest Calculation (TCP Server)
A bank’s server calculates loan interest for clients:
// LoanServer.java
ServerSocket server = new ServerSocket(5000);
while (true) {
Socket client = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
double principal = Double.parseDouble(in.readLine());
double rate = Double.parseDouble(in.readLine());
double interest = principal * rate * 0.01; // 1% annual rate
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
out.println("Interest: " + interest);
client.close();
}
Client Request:
Socket socket = new Socket("bank.example.com", 5000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("100000"); // Principal
out.println("5"); // Rate (5%)
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine()); // "Interest: 500.0"
socket.close();
5. Multithreading in Servers
Servers handle multiple clients using threads. Example:
// MultiThreadedServer.java
ServerSocket server = new ServerSocket(1234);
while (true) {
Socket client = server.accept();
new Thread(new ClientHandler(client)).start(); // New thread per client
}
class ClientHandler implements Runnable {
Socket client;
ClientHandler(Socket c) { client = c; }
public void run() {
// Handle client in a thread
}
}
Why?
- Ncell’s call server: Each call gets a thread to avoid blocking.
- Daraz’s order system: Threads process orders concurrently.
6. Firewalls and Proxies
- Firewalls: Block unauthorized traffic (e.g., NTC restricts ports for security).
- Proxies: Redirect requests (e.g., corporate networks route web traffic through a proxy).
Example: Proxy Server
// ProxyServer.java
ServerSocket proxy = new ServerSocket(8080);
while (true) {
Socket client = proxy.accept();
Socket target = new Socket("google.com", 80);
// Forward client requests to target
}
7. Java’s URL Class
Fetch web data without sockets:
URL url = new URL("https://daraz.com.np/products");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line); // Parse product data
}
Exam Tip
- Code snippets: Always show
Socket/ServerSocketinitialization and data exchange steps. - Protocols: Differentiate TCP (reliable) vs. UDP (fast) with examples.
- Multithreading: Explain why servers use threads (concurrency).
- Real-world tie-ins: Link to eSewa (security), Pathao (UDP), or Ncell (threads).
- Error handling: Check for
IOExceptionin socket operations.
Visuals
flowchart TD
A["Client"] -->|"Socket"| B["ServerSocket"]
B --> C["Handshake"]
C --> D["Data Exchange\n(InputStream/OutputStream)"]
D --> E["Close"]flowchart TD
A["UDP Client"] -->|"DatagramPacket"| B["UDP Server"]
B --> C["No Connection\n(Fire-and-forget)"]Based on the PU BE Computer (PU) syllabus for Advanced Programming with Java (CMP228), unit 9.
Discussion
Loading…