সোকেট প্রোগ্রামিং

জাভা নেটওয়ার্কিং - জাভা প্রোগ্রামিং (Java Programming) - Computer Programming

311

সোকেট প্রোগ্রামিং (Socket Programming) হলো একটি নেটওয়ার্ক প্রোগ্রামিং কৌশল, যা ক্লায়েন্ট ও সার্ভার মধ্যে ডেটা আদান-প্রদান করার জন্য ব্যবহৃত হয়। Java তে সোকেট প্রোগ্রামিং java.net প্যাকেজের উপর ভিত্তি করে তৈরি করা হয় এবং এটি TCP (Transmission Control Protocol) এবং UDP (User Datagram Protocol) প্রোটোকলের মাধ্যমে কাজ করতে পারে।

সোকেট প্রোগ্রামিং কেন দরকার?

  1. রিমোট কমিউনিকেশন: সোকেট প্রোগ্রামিংয়ের মাধ্যমে একটি ডিভাইস অন্য ডিভাইসের সাথে যোগাযোগ করতে পারে।
  2. ক্লায়েন্ট-সার্ভার আর্কিটেকচার: সোকেট প্রোগ্রামিং ব্যবহার করে ক্লায়েন্ট ও সার্ভার অ্যাপ্লিকেশন তৈরি করা যায়, যা চ্যাট অ্যাপ্লিকেশন, ফাইল ট্রান্সফার প্রোটোকল (FTP), এবং ওয়েব সার্ভিসে ব্যবহৃত হয়।
  3. ডিস্ট্রিবিউটেড সিস্টেম: সোকেট প্রোগ্রামিংয়ে বিভিন্ন সার্ভার বা ক্লায়েন্ট অ্যাপ্লিকেশনকে একসাথে যুক্ত করে ডিস্ট্রিবিউটেড সিস্টেম তৈরি করা যায়।

সোকেট প্রোগ্রামিংয়ের ভিত্তি

Java তে সোকেট প্রোগ্রামিং করতে Socket এবং ServerSocket ক্লাস ব্যবহার করা হয়। Socket ক্লাস ক্লায়েন্ট এবং সার্ভার উভয়ের জন্যই প্রযোজ্য, তবে ServerSocket ক্লাস শুধুমাত্র সার্ভারের জন্য ব্যবহার করা হয়।

  • ServerSocket: সার্ভার তৈরি করতে ব্যবহার করা হয়। এটি নির্দিষ্ট পোর্টে ক্লায়েন্টের জন্য অপেক্ষা করে এবং ক্লায়েন্ট কানেকশন গ্রহণ করে।
  • Socket: ক্লায়েন্ট এবং সার্ভার উভয়ের মধ্যে সংযোগ প্রতিষ্ঠা করে।

উদাহরণ: TCP Socket Programming

TCP প্রোটোকল ব্যবহার করে ক্লায়েন্ট-সার্ভার প্রোগ্রামিংয়ের জন্য নিচের উদাহরণ দেওয়া হলো।

সার্ভার প্রোগ্রাম

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

public class Server {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(5000)) { // পোর্ট ৫০০০ এ সার্ভার তৈরি করা
            System.out.println("Server is listening on port 5000...");

            Socket socket = serverSocket.accept(); // ক্লায়েন্ট কানেকশন গ্রহণ
            System.out.println("Client connected");

            // ইনপুট এবং আউটপুট স্ট্রিম তৈরি
            InputStream input = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));

            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);

            // ক্লায়েন্ট থেকে মেসেজ পড়া এবং রেসপন্স পাঠানো
            String message = reader.readLine();
            System.out.println("Received from client: " + message);
            writer.println("Hello from server!");

            // কানেকশন বন্ধ করা
            socket.close();
            System.out.println("Client disconnected");

        } catch (IOException e) {
            System.out.println("Server exception: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

ক্লায়েন্ট প্রোগ্রাম

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

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

        try (Socket socket = new Socket(hostname, port)) { // সার্ভারে সংযোগ স্থাপন করা
            System.out.println("Connected to the server");

            // ইনপুট এবং আউটপুট স্ট্রিম তৈরি
            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);

            InputStream input = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));

            // সার্ভারে মেসেজ পাঠানো এবং উত্তর গ্রহণ করা
            writer.println("Hello from client!");
            String response = reader.readLine();
            System.out.println("Received from server: " + response);

            // কানেকশন বন্ধ করা
            socket.close();

        } catch (UnknownHostException e) {
            System.out.println("Server not found: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("I/O error: " + e.getMessage());
        }
    }
}

বিবরণ:

Server Program:

  • ServerSocket ক্লাস দিয়ে একটি সার্ভার তৈরি করা হয়েছে যা পোর্ট ৫০০০-এ ক্লায়েন্টের জন্য অপেক্ষা করে।
  • accept() মেথড দিয়ে একটি ক্লায়েন্ট কানেকশন গ্রহণ করা হয় এবং ইনপুট ও আউটপুট স্ট্রিম ব্যবহার করে মেসেজ আদান-প্রদান করা হয়।

Client Program:

  • Socket ক্লাস দিয়ে localhost (অর্থাৎ নিজের কম্পিউটারে) এবং পোর্ট ৫০০০-এ কানেকশন স্থাপন করা হয়।
  • সার্ভারে মেসেজ পাঠানো হয় এবং সার্ভার থেকে উত্তর পাওয়া যায়।

UDP Socket Programming

UDP সোকেট প্রোগ্রামিংয়ে DatagramSocket এবং DatagramPacket ক্লাস ব্যবহার করা হয়। UDP হল কানেকশনলেস প্রোটোকল, যা নির্ভরযোগ্য ডেটা ট্রান্সমিশনের জন্য TCP-এর মতো গ্যারান্টি দেয় না, তবে দ্রুত ডেটা পাঠানোর জন্য উপযোগী।

UDP সার্ভার প্রোগ্রাম

import java.net.*;

public class UDPServer {
    public static void main(String[] args) {
        try (DatagramSocket socket = new DatagramSocket(5000)) {
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

            System.out.println("UDP Server is listening on port 5000...");

            socket.receive(packet); // ডেটা গ্রহণ করা
            String message = new String(packet.getData(), 0, packet.getLength());
            System.out.println("Received from client: " + message);

        } catch (Exception e) {
            System.out.println("Server exception: " + e.getMessage());
        }
    }
}

UDP ক্লায়েন্ট প্রোগ্রাম

java

Copy code

import java.net.*;

public class UDPClient {
    public static void main(String[] args) {
        String hostname = "localhost";
        int port = 5000;
        String message = "Hello from UDP client!";

        try (DatagramSocket socket = new DatagramSocket()) {
            byte[] buffer = message.getBytes();
            InetAddress address = InetAddress.getByName(hostname);

            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
            socket.send(packet); // ডেটা পাঠানো

            System.out.println("Message sent to server");

        } catch (Exception e) {
            System.out.println("Client exception: " + e.getMessage());
        }
    }
}

বিবরণ:

  • UDP Server:
    • DatagramSocket পোর্ট ৫০০০-এ একটি UDP সার্ভার খুলেছে এবং receive() মেথড ব্যবহার করে ডেটা প্যাকেট গ্রহণ করে।
  • UDP Client:
    • DatagramSocket দিয়ে ক্লায়েন্ট একটি মেসেজ তৈরি করে এবং send() মেথডের মাধ্যমে সার্ভারে পাঠায়।

সারসংক্ষেপ

  • সোকেট প্রোগ্রামিং হল ক্লায়েন্ট-সার্ভার কমিউনিকেশন তৈরির পদ্ধতি, যা TCP ও UDP প্রোটোকল সমর্থন করে।
  • TCP প্রোটোকল কানেকশন ভিত্তিক এবং নির্ভরযোগ্য ডেটা ট্রান্সফার নিশ্চিত করে।
  • UDP প্রোটোকল কানেকশনলেস এবং দ্রুত ডেটা পাঠাতে উপযোগী।
  • Java তে ServerSocket এবং Socket দিয়ে TCP সোকেট প্রোগ্রামিং করা যায়, আর UDP-এর জন্য DatagramSocket এবং DatagramPacket ব্যবহার করা হয়।

সোকেট প্রোগ্রামিংয়ের মাধ্যমে ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন তৈরি করা যায়, যা ইন্টারনেট বা লোকাল নেটওয়ার্কে ডেটা শেয়ার এবং যোগাযোগ করতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...