Socket communication in Java enables communication between two endpoints over a network. There are two main types of sockets: TCP sockets and UDP sockets. Let's explain both types with examples: TCP Socket Communication: 1. **Server Side**: - The server creates a `ServerSocket` object to listen for incoming connections on a specific port. - When a client connects, the server accepts the connection and creates a `Socket` object to communicate with the client. - The server reads from and writes to the socket's input and output streams to communicate with the client. import java.io.*; import java.net.*; public class TCPServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(12345); System.out.println("Server started. Waiting for client..."); Socket clientSocket = serverSocket.accept(); System.out.println("Client connected."); BufferedReader in = new Bu
In Java, you can create custom exceptions by extending the `Exception` class or one of its subclasses like `RuntimeException`. Custom exceptions are useful when you want to define your own exception types to represent specific error conditions in your application. Syntax for creating a custom exception: public class CustomException extends Exception { // Constructors, methods, and additional members can be defined here } Example of a custom exception: public class InvalidAgeException extends Exception { public InvalidAgeException(String message) { super(message); } } public class AgeValidator { public static void validateAge(int age) throws InvalidAgeException { if (age < 0) { throw new InvalidAgeException("Age cannot be negative"); } if (age < 18) { throw new InvalidAgeException("Must be at least 18 years old"); } System.out.println("Age is valid"); } pub