Skip to main content

Java Exception Handling MCQ Test

  Loading…

Socket (TCP & UDP) communication in Java

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 BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);


        String message = in.readLine();

        System.out.println("Client says: " + message);


        out.println("Hello from server!");


        clientSocket.close();

        serverSocket.close();

    }

}



2. Client Side:

   - The client creates a `Socket` object and connects to the server using its IP address and port number.

   - The client communicates with the server by reading from and writing to the socket's input and output streams.



import java.io.*;

import java.net.*;


public class TCPClient {

    public static void main(String[] args) throws IOException {

        Socket socket = new Socket("localhost", 12345);


        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));


        out.println("Hello from client!");


        String response = in.readLine();

        System.out.println("Server response: " + response);


        socket.close();

    }

}



UDP Socket Communication:


1. Server Side:

   - The server creates a `DatagramSocket` object to send and receive datagrams (packets) over the network.

   - The server listens for incoming datagrams on a specific port.

   - The server processes incoming datagrams and sends response datagrams if necessary.



import java.io.*;

import java.net.*;


public class UDPServer {

    public static void main(String[] args) throws IOException {

        DatagramSocket serverSocket = new DatagramSocket(12345);

        byte[] receiveData = new byte[1024];

        byte[] sendData;


        System.out.println("Server started. Waiting for client...");


        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

        serverSocket.receive(receivePacket);


        String message = new String(receivePacket.getData()).trim();

        System.out.println("Client says: " + message);


        InetAddress clientAddress = receivePacket.getAddress();

        int clientPort = receivePacket.getPort();

        sendData = "Hello from server!".getBytes();

        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);

        serverSocket.send(sendPacket);


        serverSocket.close();

    }

}



2. Client Side:

   - The client creates a `DatagramSocket` object to send and receive datagrams.

   - The client sends datagrams to the server's IP address and port number.

   - The client receives response datagrams from the server.



import java.io.*;

import java.net.*;


public class UDPClient {

    public static void main(String[] args) throws IOException {

        DatagramSocket clientSocket = new DatagramSocket();


        InetAddress serverAddress = InetAddress.getByName("localhost");

        int serverPort = 12345;


        byte[] sendData = "Hello from client!".getBytes();

        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort);

        clientSocket.send(sendPacket);


        byte[] receiveData = new byte[1024];

        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

        clientSocket.receive(receivePacket);


        String response = new String(receivePacket.getData()).trim();

        System.out.println("Server response: " + response);


        clientSocket.close();

    }

}



 Conclusion:

Socket communication in Java allows for the exchange of data between two endpoints over a network. TCP sockets provide reliable, connection-oriented communication, while UDP sockets offer lightweight, connectionless communication. Understanding socket programming is essential for developing networked applications in Java.

Comments