Spex3
    

Java Networking: Socket Programming


    

    

Java Networking: Socket Programming
Java provides a powerful networking API in the java.net package that allows developers to create network-based applications using sockets.

1. What is Socket Programming?
A socket is an endpoint for communication between two machines. Java's socket programming enables communication using TCP (Transmission Control Protocol) and UDP (User Datagram Protocol).

🔹 TCP (Transmission Control Protocol) – Reliable, connection-based communication.
🔹 UDP (User Datagram Protocol) – Faster, connectionless, and less reliable.

2. Java Socket API Overview
Main Classes in java.net for Socket Programming

Class Description
Socket Used for creating a client socket.
ServerSocket Used for creating a server socket that listens for client requests.
InetAddress Represents an IP address.
DatagramSocket Used for UDP communication.
DatagramPacket Represents UDP packets.

3. TCP Socket Programming (Client-Server Model)
A TCP connection follows these steps:

The server creates a ServerSocket and waits for clients.

The client connects using a Socket.

Both communicate using input and output streams.

3.1 TCP Server Code
The server waits for a client to connect and sends a response.


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

public class TCPServer {
public static void main(String[] args) {
int port = 5000; // Port number
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is listening on port " + port);

while (true) {
Socket socket = serverSocket.accept(); // Accept client connection
System.out.println("Client connected");

// Create input and output streams
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

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

out.println("Hello from Server!"); // Send response to client

socket.close(); // Close connection
}
} catch (IOException e) {
e.printStackTrace();
}
}
}


3.2 TCP Client Code

The client connects to the server and sends a message.


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

public class TCPClient {
public static void main(String[] args) {
String serverAddress = "localhost"; // Server address
int port = 5000; // Port number

try (Socket socket = new Socket(serverAddress, port)) {
// Create input and output streams
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

out.println("Hello Server!"); // Send message to server

String response = in.readLine(); // Read response from server
System.out.println("Server says: " + response);

} catch (IOException e) {
e.printStackTrace();
}
}
}


4. UDP Socket Programming (Client-Server Model)
UDP is faster than TCP but does not guarantee message delivery.

4.1 UDP Server Code
The server receives packets and responds.


import java.net.*;

public class UDPServer {
public static void main(String[] args) {
int port = 5000;
byte[] buffer = new byte[1024];

try (DatagramSocket socket = new DatagramSocket(port)) {
System.out.println("UDP Server is listening on port " + port);

while (true) {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet); // Receive packet from client

String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Received: " + received);

// Send response to client
String response = "Hello from UDP Server!";
byte[] responseData = response.getBytes();
DatagramPacket responsePacket = new DatagramPacket(
responseData, responseData.length, packet.getAddress(), packet.getPort()
);

socket.send(responsePacket); // Send response
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


4.2 UDP Client Code
The client sends a message to the server.


import java.net.*;

public class UDPClient {
public static void main(String[] args) {
String serverAddress = "localhost";
int port = 5000;

try (DatagramSocket socket = new DatagramSocket()) {
String message = "Hello UDP Server!";
byte[] buffer = message.getBytes();

InetAddress address = InetAddress.getByName(serverAddress);
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
socket.send(packet); // Send message

// Receive response
byte[] responseBuffer = new byte[1024];
DatagramPacket responsePacket = new DatagramPacket(responseBuffer, responseBuffer.length);
socket.receive(responsePacket);

String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
System.out.println("Server says: " + response);

} catch (Exception e) {
e.printStackTrace();
}
}
}


5. Key Differences: TCP vs UDP

Feature TCP UDP

Connection Type Connection-oriented Connectionless

Reliability Reliable (ensures data is received) Unreliable (packets may be lost)

Speed Slower (ensures delivery) Faster (no delivery guarantee)

Usage Web, chat applications Video streaming, VoIP, gaming

6. Summary
✅ TCP Sockets – Reliable, connection-based communication (used in HTTP, FTP, etc.).
✅ UDP Sockets – Fast, connectionless communication (used in gaming, streaming).
✅ Key Classes – Socket, ServerSocket, DatagramSocket, DatagramPacket.