Socket Programming-এ ক্লায়েন্ট এবং সার্ভার উভয়কেই Socket ব্যবহার করে নেটওয়ার্কে যোগাযোগ স্থাপন করতে হয়। নিচে TCP (Transmission Control Protocol) ব্যবহার করে একটি সাধারণ ক্লায়েন্ট-সার্ভার অ্যাপ্লিকেশন উদাহরণ দেখানো হয়েছে, যেখানে সার্ভার একটি নির্দিষ্ট পোর্টে সংযোগ গ্রহণ করে এবং ক্লায়েন্ট সেই সার্ভারের সাথে সংযোগ স্থাপন করে ডেটা আদান-প্রদান করে।
TCP সার্ভার প্রোগ্রাম উদাহরণ (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 addrlen = sizeof(address);
char buffer[1024] = {0};
char *hello = "Hello from server";
// 1. Socket তৈরি করা
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 2. সার্ভার ঠিকানা সেটআপ করা
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 3. Binding করা
if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) {
perror("Bind failed");
exit(EXIT_FAILURE);
}
// 4. Listening করা
if (listen(server_fd, 3) < 0) {
perror("Listen failed");
exit(EXIT_FAILURE);
}
printf("Server is listening on port %d\n", PORT);
// 5. Accepting সংযোগ
if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) {
perror("Accept failed");
exit(EXIT_FAILURE);
}
// 6. ডেটা গ্রহণ করা
read(new_socket, buffer, 1024);
printf("Client: %s\n", buffer);
// 7. ডেটা পাঠানো
send(new_socket, hello, strlen(hello), 0);
printf("Hello message sent to client\n");
// 8. Socket বন্ধ করা
close(new_socket);
close(server_fd);
return 0;
}TCP ক্লায়েন্ট প্রোগ্রাম উদাহরণ (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 *hello = "Hello from client";
char buffer[1024] = {0};
// 1. Socket তৈরি করা
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("Socket creation failed\n");
return -1;
}
// 2. সার্ভার ঠিকানা সেটআপ করা
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// 3. IP Address সেট করা
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
printf("Invalid address or Address not supported\n");
return -1;
}
// 4. সার্ভারের সাথে সংযোগ স্থাপন করা
if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
printf("Connection Failed\n");
return -1;
}
// 5. ডেটা পাঠানো
send(sock, hello, strlen(hello), 0);
printf("Hello message sent to server\n");
// 6. ডেটা গ্রহণ করা
read(sock, buffer, 1024);
printf("Server: %s\n", buffer);
// 7. Socket বন্ধ করা
close(sock);
return 0;
}
প্রোগ্রামগুলোর বিশ্লেষণ
সার্ভার প্রোগ্রাম:
Socket তৈরি:
socket()System Call ব্যবহার করে সার্ভার Socket তৈরি করা হয়, যাAF_INET(IPv4) এবংSOCK_STREAM(TCP) ব্যবহার করে।
Binding:
bind()ফাংশন সার্ভার Socket-কে একটি নির্দিষ্ট IP Address এবং Port Number (8080) এর সাথে সংযুক্ত করে, যাতে এটি ইনকামিং সংযোগ গ্রহণ করতে পারে।
Listening:
listen()ফাংশন সার্ভার Socket-কে ইনকামিং সংযোগ গ্রহণের জন্য অপেক্ষা করতে প্রস্তুত করে। এখানে3প্যারামিটারটি ব্যাকলগ নির্দেশ করে, যা সার্ভার কতটি ইনকামিং সংযোগ কিউতে রাখতে পারবে।
Accepting সংযোগ:
accept()ফাংশন ব্যবহার করে ইনকামিং সংযোগ গ্রহণ করা হয় এবং একটি নতুন Socket তৈরি করা হয়, যা ক্লায়েন্টের সাথে ডেটা ট্রান্সফারের জন্য ব্যবহৃত হয়।
ডেটা পাঠানো এবং গ্রহণ:
read()এবংsend()ফাংশন ব্যবহার করে ক্লায়েন্ট থেকে ডেটা গ্রহণ এবং ক্লায়েন্টে ডেটা পাঠানো হয়।
Socket বন্ধ করা:
close()ফাংশন ব্যবহার করে সার্ভার এবং ক্লায়েন্ট Socket বন্ধ করা হয়।
ক্লায়েন্ট প্রোগ্রাম:
Socket তৈরি:
socket()System Call ব্যবহার করে ক্লায়েন্ট Socket তৈরি করা হয়।
সার্ভারের ঠিকানা সেটআপ:
inet_pton()ফাংশন ব্যবহার করে সার্ভারের IP Address (127.0.0.1, যা localhost) এবং Port Number (8080) সেট করা হয়।
সার্ভারের সাথে সংযোগ স্থাপন:
connect()ফাংশন ব্যবহার করে সার্ভারের সাথে সংযোগ স্থাপন করা হয়।
ডেটা পাঠানো এবং গ্রহণ:
send()এবংread()ফাংশন ব্যবহার করে ক্লায়েন্ট ডেটা পাঠায় এবং সার্ভার থেকে ডেটা গ্রহণ করে।
Socket বন্ধ করা:
close()ফাংশন ব্যবহার করে ক্লায়েন্ট Socket বন্ধ করা হয়।
কিভাবে এই প্রোগ্রামগুলো চালাবেন
- প্রথমে, সার্ভার প্রোগ্রামটি চালু করুন। এটি একটি নির্দিষ্ট পোর্টে (এখানে 8080) ইনকামিং সংযোগের জন্য অপেক্ষা করবে।
- এরপর ক্লায়েন্ট প্রোগ্রামটি চালান। ক্লায়েন্ট প্রোগ্রাম সার্ভারের সাথে সংযোগ স্থাপন করবে এবং বার্তা পাঠাবে।
- সার্ভার সেই বার্তা গ্রহণ করবে এবং ক্লায়েন্টকে একটি সাড়া পাঠাবে।
- উভয় প্রোগ্রামেই একটি বার্তা প্রদর্শিত হবে, যা দেখাবে যে ক্লায়েন্ট এবং সার্ভার কী পাঠাচ্ছে।
Read more