Socket Creation এবং Initialization

Computer Programming - ইউনিক্স সকেট (Unix Socket) Socket API এবং এর ব্যবহার (Socket API and Its Usage) |
270
270

Socket Programming-এ Socket Creation এবং Initialization হলো ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ স্থাপনের প্রথম ধাপ। এই ধাপে Socket তৈরি এবং সেটআপ করা হয়, যাতে এটি সঠিকভাবে নেটওয়ার্ক সংযোগ স্থাপন এবং ডেটা আদান-প্রদানে সক্ষম হয়। এই প্রক্রিয়ার মাধ্যমে, একটি Socket একটি নির্দিষ্ট IP Address Family, Socket Type, এবং প্রোটোকল নির্ধারণ করে তৈরি করা হয়।

১. Socket Creation (Socket তৈরি করা)

Socket তৈরি করতে socket() System Call ব্যবহার করা হয়। এটি Socket-এর জন্য একটি ফাইল ডেসক্রিপ্টর (file descriptor) তৈরি করে এবং তা ক্লায়েন্ট বা সার্ভারের মাধ্যমে নেটওয়ার্ক যোগাযোগের জন্য ব্যবহৃত হয়।

Syntax:

int socket(int domain, int type, int protocol);

domain: Address family নির্দেশ করে, যা Socket-এর মাধ্যমে কোন প্রোটোকল ব্যবহার করা হবে তা নির্ধারণ করে। সাধারণত ব্যবহৃত ডোমেইনগুলো হলো:

  • AF_INET (IPv4) - IPv4 ঠিকানা ব্যবহারের জন্য।
  • AF_INET6 (IPv6) - IPv6 ঠিকানা ব্যবহারের জন্য।
  • AF_UNIX (Unix Domain Sockets) - একই সিস্টেমে প্রসেসগুলোর মধ্যে যোগাযোগের জন্য।

type: Socket-এর ধরন নির্দেশ করে, যা সংযোগের পদ্ধতি নির্ধারণ করে। সাধারণত ব্যবহৃত টাইপগুলো হলো:

  • SOCK_STREAM (TCP) - কানেকশন-অরিয়েন্টেড এবং নির্ভরযোগ্য যোগাযোগের জন্য।
  • SOCK_DGRAM (UDP) - কানেকশনলেস এবং দ্রুত যোগাযোগের জন্য।

protocol: সাধারণত 0 রাখা হয়, যা ডিফল্ট প্রোটোকল ব্যবহার করে। এটি নির্দিষ্ট প্রোটোকল যেমন TCP বা UDP এর সাথে সংশ্লিষ্ট হয়।

উদাহরণ:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  • এখানে, AF_INET IPv4 ঠিকানার জন্য, SOCK_STREAM TCP প্রোটোকলের জন্য, এবং 0 ডিফল্ট প্রোটোকল নির্ধারণ করার জন্য ব্যবহৃত হয়েছে।
  • যদি Socket সফলভাবে তৈরি হয়, তাহলে এটি একটি পজিটিভ ফাইল ডেসক্রিপ্টর (file descriptor) রিটার্ন করে; অন্যথায় এটি -1 রিটার্ন করে, যা ত্রুটির নির্দেশ দেয়।

২. Socket Initialization (Socket-এর Initialization)

Socket Creation-এর পর, Socket Initialization প্রক্রিয়ায় Socket-এর জন্য Address এবং Port Number সেটআপ করা হয়। সার্ভারের ক্ষেত্রে, bind() System Call ব্যবহার করে IP Address এবং Port Number সেট করা হয়, যাতে এটি নির্দিষ্ট পোর্টে সংযোগ গ্রহণ করতে পারে। ক্লায়েন্টের ক্ষেত্রে, connect() System Call ব্যবহার করে ক্লায়েন্ট Socket-কে সার্ভারের সাথে সংযুক্ত করা হয়।

সার্ভারের ক্ষেত্রে Initialization

সার্ভারের ক্ষেত্রে, Socket Initialization-এর জন্য bind() এবং listen() ফাংশন ব্যবহার করা হয়।

bind():

  • সার্ভারের IP Address এবং Port Number-কে Socket-এর সাথে সংযুক্ত করে।
  • Syntax:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • উদাহরণ:
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
  • server_addr হলো sockaddr_in স্ট্রাকচার, যা সার্ভারের ঠিকানা এবং পোর্ট ধারণ করে।
  • htons() ফাংশন পোর্ট নম্বরকে নেটওয়ার্ক অর্ডারে (network byte order) কনভার্ট করে।

listen():

  • সার্ভার Socket-কে ইনকামিং সংযোগ গ্রহণের জন্য প্রস্তুত করে।
  • Syntax:
int listen(int sockfd, int backlog);
  • উদাহরণ:
listen(sockfd, 5);
  • এখানে, backlog হলো সর্বোচ্চ কতটি কানেকশন একসঙ্গে অপেক্ষায় থাকতে পারবে, তা নির্দেশ করে।

ক্লায়েন্টের ক্ষেত্রে Initialization

ক্লায়েন্টের ক্ষেত্রে, connect() ফাংশন ব্যবহার করা হয়, যা সার্ভারের IP Address এবং Port Number ব্যবহার করে সংযোগ স্থাপন করে।

  1. connect():
    • ক্লায়েন্ট Socket-কে সার্ভারের সাথে সংযোগ স্থাপন করতে ব্যবহৃত হয়।
    • Syntax:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    • উদাহরণ:
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
  • এখানে, inet_addr() ফাংশন ব্যবহার করে IPv4 ঠিকানাকে নেটওয়ার্ক ফরম্যাটে কনভার্ট করা হয়েছে।
  • server_addr স্ট্রাকচার সার্ভারের IP Address এবং Port ধারণ করছে।

৩. Socket Creation এবং Initialization এর পূর্ণাঙ্গ উদাহরণ

নিচে TCP ভিত্তিক ক্লায়েন্ট এবং সার্ভারের মধ্যে সংযোগ স্থাপনের একটি সাধারণ উদাহরণ দেখানো হলো:

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

int sockfd, new_sock;
struct sockaddr_in server_addr, client_addr;
socklen_t addr_size;
char buffer[1024];

// Socket তৈরি
sockfd = socket(AF_INET, SOCK_STREAM, 0);

// সার্ভার ঠিকানা সেটআপ
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = INADDR_ANY;

// Binding
bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));

// Listening
listen(sockfd, 5);

// Accepting Connection
addr_size = sizeof(client_addr);
new_sock = accept(sockfd, (struct sockaddr*)&client_addr, &addr_size);

// ডেটা পাঠানো এবং গ্রহণ
recv(new_sock, buffer, 1024, 0);
send(new_sock, "Hello, Client!", strlen("Hello, Client!"), 0);

// Socket বন্ধ
close(new_sock);
close(sockfd);

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

int sockfd;
struct sockaddr_in server_addr;
char buffer[1024];

// Socket তৈরি
sockfd = socket(AF_INET, SOCK_STREAM, 0);

// সার্ভার ঠিকানা সেটআপ
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

// সার্ভারের সাথে সংযোগ স্থাপন
connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));

// ডেটা পাঠানো এবং গ্রহণ
send(sockfd, "Hello, Server!", strlen("Hello, Server!"), 0);
recv(sockfd, buffer, 1024, 0);

// Socket বন্ধ
close(sockfd);

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

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

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

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