Client-Server মডেল হল একটি জনপ্রিয় আর্কিটেকচারাল কৌশল যা নেটওয়ার্কে বিভিন্ন ডিভাইসের মধ্যে যোগাযোগকে সহজ করে। Socket প্রোগ্রামিং ব্যবহার করে, ক্লায়েন্ট এবং সার্ভারের মধ্যে তথ্য আদান-প্রদান করার একটি কার্যকরী পদ্ধতি তৈরি করা যায়। আসুন Client-Server মডেলে Socket প্রোগ্রামিংয়ের বিভিন্ন দিক আলোচনা করি।
Client-Server Architecture
১. Client: ক্লায়েন্ট হল সেই অ্যাপ্লিকেশন বা প্রক্রিয়া যা সার্ভারের কাছে একটি পরিষেবা বা তথ্যের জন্য অনুরোধ পাঠায়। এটি ব্যবহারকারীর পক্ষ থেকে কাজ করে এবং সার্ভারের কাছে যোগাযোগ করে।
২. Server: সার্ভার হল সেই অ্যাপ্লিকেশন বা প্রক্রিয়া যা ক্লায়েন্টের কাছ থেকে আসা অনুরোধগুলি গ্রহণ করে এবং তার প্রয়োজনীয় তথ্য বা পরিষেবা প্রদান করে।
Socket Programming এর মূল উপাদান
১. Socket: একটি Socket হল একটি সফটওয়্যার অবজেক্ট যা একটি নেটওয়ার্কের মাধ্যমে যোগাযোগের জন্য ব্যবহৃত হয়। এটি একটি IP ঠিকানা এবং পোর্ট নম্বরের সাথে যুক্ত থাকে।
২. TCP এবং UDP: Socket প্রোগ্রামিংয়ে সাধারণত TCP (Transmission Control Protocol) এবং UDP (User Datagram Protocol) ব্যবহার করা হয়।
- TCP: এটি কানেকশন-ভিত্তিক, নিরাপদ এবং নির্ভরযোগ্য।
- UDP: এটি কানেকশনহীন, দ্রুত কিন্তু কম নিরাপদ।
Socket প্রোগ্রামিংয়ের ধাপ
1. সার্ভার প্রোগ্রাম তৈরি করা
- Socket তৈরি করা:
socket()ফাংশন ব্যবহার করে একটি নতুন Socket তৈরি করুন। - Bind করা: সার্ভারের IP ঠিকানা এবং পোর্ট নম্বরের সাথে Socket যুক্ত করুন।
- Listen করা: ক্লায়েন্টের জন্য অপেক্ষা করুন।
- Accept করা: ক্লায়েন্টের সংযোগ গ্রহণ করুন।
- Data Communication: ক্লায়েন্টের সাথে তথ্য আদান-প্রদান করুন।
- Close করা: Socket বন্ধ করুন।
সার্ভার কোড (server.c):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
// সার্ভার Socket তৈরি
server_fd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// Socket যুক্ত করা
bind(server_fd, (struct sockaddr *)&address, sizeof(address));
listen(server_fd, 3);
// ক্লায়েন্টের সংযোগ গ্রহণ করা
new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);
read(new_socket, buffer, 1024);
printf("Received: %s\n", buffer);
// ক্লায়েন্টের প্রতি উত্তর পাঠান
char *message = "Hello from server!";
send(new_socket, message, strlen(message), 0);
// Socket বন্ধ করুন
close(new_socket);
close(server_fd);
return 0;
}
2. ক্লায়েন্ট প্রোগ্রাম তৈরি করা
- Socket তৈরি করা:
socket()ফাংশন ব্যবহার করে একটি নতুন Socket তৈরি করুন। - Connect করা: সার্ভারের সাথে সংযোগ স্থাপন করুন।
- Data Communication: সার্ভারের সাথে তথ্য আদান-প্রদান করুন।
- Close করা: Socket বন্ধ করুন।
ক্লায়েন্ট কোড (client.c):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char *message = "Hello from client!";
char buffer[1024] = {0};
// ক্লায়েন্ট Socket তৈরি
sock = socket(AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// সার্ভারের IP ঠিকানা সেট করা
inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);
// সার্ভারের সাথে সংযোগ স্থাপন
connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
// সার্ভারে ডেটা পাঠান
send(sock, message, strlen(message), 0);
read(sock, buffer, sizeof(buffer)); // সার্ভার থেকে ডেটা গ্রহণ করা
printf("Received from server: %s\n", buffer); // মেসেজ প্রদর্শন
// Socket বন্ধ করুন
close(sock);
return 0;
}
উদাহরণ বিশ্লেষণ
১. সার্ভার কোড:
- সার্ভার Socket তৈরি করে, IP ঠিকানা এবং পোর্ট নম্বরের সাথে যুক্ত করে, ক্লায়েন্টের সংযোগ গ্রহণ করে, এবং ক্লায়েন্ট থেকে মেসেজ পড়ে এবং একটি প্রতিক্রিয়া পাঠায়।
২. ক্লায়েন্ট কোড:
- ক্লায়েন্ট একটি Socket তৈরি করে, সার্ভারের সাথে সংযোগ স্থাপন করে, সার্ভারকে একটি মেসেজ পাঠায় এবং সার্ভার থেকে একটি প্রতিক্রিয়া গ্রহণ করে।
উপসংহার
Socket Programming Client-Server মডেলে যোগাযোগের একটি গুরুত্বপূর্ণ প্রযুক্তি। TCP/IP প্রোটোকলের মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদ এবং নির্ভরযোগ্য তথ্য বিনিময় নিশ্চিত করতে এটি ব্যাপকভাবে ব্যবহৃত হয়। এই উদাহরণগুলো সাহায্য করে একটি মৌলিক ক্লায়েন্ট-সার্ভার অ্যাপ্লিকেশন তৈরি করতে, যা নেটওয়ার্কিংয়ের ধারণা বুঝতে সহায়ক।
Read more