C তে Socket Programming এর মৌলিক ধারণা

Computer Programming - ইউনিক্স সকেট (Unix Socket) Socket Programming in C (C ভাষায় Socket Programming) |
234
234

C তে Socket Programming এর মৌলিক ধারণা

সকেট প্রোগ্রামিং হল একটি গুরুত্বপূর্ণ প্রযুক্তি যা নেটওয়ার্ক প্রোগ্রামিংয়ের মাধ্যমে একাধিক কম্পিউটার বা প্রোগ্রামকে একে অপরের সাথে যোগাযোগ করতে সহায়তা করে। C ভাষায় সকেট প্রোগ্রামিং দিয়ে ক্লায়েন্ট এবং সার্ভার অ্যাপ্লিকেশন তৈরি করা যায়, যা TCP/IP বা UDP প্রোটোকল ব্যবহার করে ডেটা আদান-প্রদান করে।

সকেট প্রোগ্রামিংয়ে একটি সকেট হল একটি প্রোগ্রামের প্রক্রিয়ার সাথে যুক্ত এক ধরনের পোর্ট, যার মাধ্যমে এটি নেটওয়ার্কের অন্য প্রোগ্রামের সাথে যোগাযোগ স্থাপন করতে পারে। C ভাষায় সকেট প্রোগ্রামিংয়ের মাধ্যমে একটি সার্ভার বা ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করতে হয় যা TCP বা UDP প্রোটোকল ব্যবহার করে যোগাযোগ করে।

১. Socket Programming এর প্রাথমিক ধারণা

সকেট প্রোগ্রামিং মূলত দুটি প্রকারের প্রোটোকল ব্যবহার করে:

  • TCP (Transmission Control Protocol): এটি একটি কানেকশন ভিত্তিক প্রোটোকল, যা ডেটার সঠিকতা এবং অর্ডার বজায় রাখে।
  • UDP (User Datagram Protocol): এটি একটি কানেকশনলেস প্রোটোকল, যা দ্রুত ডেটা ট্রান্সফার করে, তবে এটি ডেটার সঠিকতা বা অর্ডার নিশ্চিত করে না।

২. C তে Socket Programming শুরু করা

C তে সকেট প্রোগ্রামিং শুরু করার জন্য, sys/socket.h লাইব্রেরি ইমপোর্ট করতে হয়, যেটি সকেট সম্পর্কিত ফাংশন এবং ডাটা স্ট্রাকচার প্রদান করে।

মৌলিক স্টেপস:

  1. সকেট তৈরি করা: socket() ফাংশন ব্যবহার করে সকেট তৈরি করা হয়।
  2. বেঁধে দেওয়া: bind() ফাংশন ব্যবহার করে সকেটটিকে একটি পোর্ট এবং আইপি ঠিকানায় বেঁধে দেওয়া হয়।
  3. শুনতে থাকা: listen() ফাংশন দ্বারা সার্ভার ক্লায়েন্টের সংযোগের জন্য অপেক্ষা করে।
  4. সংযোগ গ্রহণ করা: accept() ফাংশন ব্যবহার করে সার্ভার ক্লায়েন্টের সংযোগ গ্রহণ করে।
  5. ডেটা প্রেরণ এবং গ্রহণ: send() এবং recv() ফাংশন ব্যবহার করে ডেটা প্রেরণ এবং গ্রহণ করা হয়।
  6. সংযোগ বন্ধ করা: close() ফাংশন দ্বারা সকেট বন্ধ করা হয়।

৩. TCP সার্ভার উদাহরণ (C)

এখানে একটি TCP সার্ভারের উদাহরণ দেওয়া হল যা একটি ক্লায়েন্ট থেকে বার্তা গ্রহণ করবে এবং তা সাড়া পাঠাবে।

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 8080

int main() {
    int server_socket, client_socket;
    struct sockaddr_in server_addr, client_addr;
    socklen_t addr_size;
    char buffer[1024];

    // সার্ভার সকেট তৈরি করা
    server_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (server_socket < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // সার্ভার অ্যাড্রেস স্ট্রাকচার সেট করা
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;  // যেকোনো নেটওয়ার্ক আইপি ঠিকানা গ্রহণ করবে
    server_addr.sin_port = htons(PORT);

    // সকেটটি বেঁধে দেওয়া
    if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        exit(EXIT_FAILURE);
    }

    // সংযোগের জন্য অপেক্ষা করা
    if (listen(server_socket, 10) == 0) {
        printf("Server listening on port %d\n", PORT);
    } else {
        perror("Listen failed");
        exit(EXIT_FAILURE);
    }

    addr_size = sizeof(client_addr);
    client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &addr_size);

    if (client_socket < 0) {
        perror("Client connection failed");
        exit(EXIT_FAILURE);
    }

    printf("Client connected\n");

    // ক্লায়েন্ট থেকে বার্তা গ্রহণ করা
    recv(client_socket, buffer, sizeof(buffer), 0);
    printf("Client says: %s\n", buffer);

    // ক্লায়েন্টকে সাড়া পাঠানো
    send(client_socket, "Hello from server!", strlen("Hello from server!"), 0);

    // সংযোগ বন্ধ করা
    close(server_socket);
    close(client_socket);

    return 0;
}

কোডের ব্যাখ্যা:

  • socket(): একটি সকেট তৈরি করে যা TCP সেবা প্রদান করবে।
  • bind(): সার্ভার সকেটকে একটি পোর্ট এবং আইপি ঠিকানায় বেঁধে দেওয়া।
  • listen(): ক্লায়েন্টের সংযোগের জন্য সার্ভার সকেট অপেক্ষা করছে।
  • accept(): সার্ভার ক্লায়েন্টের সংযোগ গ্রহণ করছে।
  • recv(): ক্লায়েন্ট থেকে বার্তা গ্রহণ করা।
  • send(): ক্লায়েন্টকে সাড়া পাঠানো।
  • close(): সকেট বন্ধ করা।

৪. TCP ক্লায়েন্ট উদাহরণ (C)

এখানে একটি TCP ক্লায়েন্টের উদাহরণ দেওয়া হল যা সার্ভারের সাথে সংযোগ স্থাপন করবে এবং বার্তা পাঠাবে।

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define SERVER_IP "127.0.0.1"
#define PORT 8080

int main() {
    int client_socket;
    struct sockaddr_in server_addr;
    char *message = "Hello from client!";
    char buffer[1024];

    // ক্লায়েন্ট সকেট তৈরি করা
    client_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (client_socket < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // সার্ভারের অ্যাড্রেস সেট করা
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);

    // সার্ভারের সাথে সংযোগ স্থাপন করা
    if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("Connection failed");
        exit(EXIT_FAILURE);
    }

    // সার্ভারকে বার্তা পাঠানো
    send(client_socket, message, strlen(message), 0);

    // সার্ভার থেকে সাড়া গ্রহণ করা
    recv(client_socket, buffer, sizeof(buffer), 0);
    printf("Server says: %s\n", buffer);

    // সংযোগ বন্ধ করা
    close(client_socket);

    return 0;
}

কোডের ব্যাখ্যা:

  • socket(): ক্লায়েন্ট সকেট তৈরি করা।
  • connect(): সার্ভারের সাথে সংযোগ স্থাপন করা।
  • send(): সার্ভারে বার্তা পাঠানো।
  • recv(): সার্ভার থেকে সাড়া গ্রহণ করা।
  • close(): সকেট বন্ধ করা।

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

UDP সকেট প্রোগ্রামিং TCP এর মতো কিন্তু এটি কানেকশনলেস প্রোটোকল, যার ফলে এটি দ্রুত যোগাযোগ করতে সক্ষম, তবে ডেটার সঠিকতা বা অর্ডার গ্যারান্টি দেয় না।

UDP সার্ভার উদাহরণ:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 8080

int main() {
    int server_socket;
    struct sockaddr_in server_addr, client_addr;
    socklen_t addr_size;
    char buffer[1024];

    // UDP সকেট তৈরি করা
    server_socket = socket(AF_INET, SOCK_DGRAM, 0);
    if (server_socket < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // সার্ভারের অ্যাড্রেস সেট করা
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    server_addr.sin_addr.s_addr = INADDR_ANY;

    // সার্ভারের অ্যাড্রেসে সকেট বেঁধে দেওয়া
    if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        exit(EXIT_FAILURE);
    }

    printf("UDP Server listening on port %d\n", PORT);

    // ক্লায়েন্ট থেকে বার্তা গ্রহণ করা
    addr_size = sizeof(client_addr);
    recvfrom(server_socket, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &addr_size);
    printf("Received: %s\n", buffer);

    // ক্লায়েন্টকে সাড়া পাঠানো
    sendto(server_socket, "Hello from server!", strlen("Hello from server!"), 0, (struct sockaddr *)&client_addr, addr_size);

    // সকেট বন্ধ করা
    close(server_socket);

    return

 0;
}

UDP ক্লায়েন্ট উদাহরণ:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define SERVER_IP "127.0.0.1"
#define PORT 8080

int main() {
    int client_socket;
    struct sockaddr_in server_addr;
    char *message = "Hello from client!";
    char buffer[1024];

    // UDP সকেট তৈরি করা
    client_socket = socket(AF_INET, SOCK_DGRAM, 0);
    if (client_socket < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // সার্ভারের অ্যাড্রেস সেট করা
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);

    // সার্ভারে বার্তা পাঠানো
    sendto(client_socket, message, strlen(message), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));

    // সার্ভার থেকে সাড়া গ্রহণ করা
    recvfrom(client_socket, buffer, sizeof(buffer), 0, NULL, NULL);
    printf("Server says: %s\n", buffer);

    // সকেট বন্ধ করা
    close(client_socket);

    return 0;
}

উপসংহার

C তে সকেট প্রোগ্রামিংয়ের মাধ্যমে আপনি TCP এবং UDP প্রোটোকল ব্যবহার করে সার্ভার এবং ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করতে পারবেন। এতে সংযোগ স্থাপন, ডেটা প্রেরণ এবং গ্রহণের জন্য বিভিন্ন ফাংশন ব্যবহার করা হয়। TCP প্রোটোকল যেখানে সঠিকতা এবং ডেটার অর্ডার নিশ্চিত করে, সেখানে UDP প্রোটোকল দ্রুত ডেটা পাঠানোর জন্য ব্যবহৃত হয়, তবে এটি অর্ডার বা সঠিকতা নিশ্চিত করে না।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion