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
Input/Output Streams in Java In Java, streams represent a sequence of data. Input streams are used for reading data from a source, while output streams are used for writing data to a destination. Types of Streams: 1. Byte Streams: - Operate on bytes. - Suitable for binary data. - `InputStream` and `OutputStream` are the abstract classes for byte streams. 2. Character Streams: - Operate on characters, internally converting them to bytes. - Suitable for text data. - `Reader` and `Writer` are the abstract classes for character streams. Commonly Used Byte Streams: - `FileInputStream` and `FileOutputStream`: For reading/writing from/to files. - `ByteArrayInputStream` and `ByteArrayOutputStream`: For reading/writing to byte arrays. - `DataInputStream` and `DataOutputStream`: For reading/writing primitive data types. - `ObjectInputStream` and `ObjectOutputStream`: For reading/writing Java objects. Commonly Used Character Streams: - `FileReader` and `FileWriter`: For reading