UDP (User Datagram Protocol) একটি connectionless প্রোটোকল, যা ডেটা প্যাকেট বা Datagram সরাসরি প্রেরণ করে। TCP-এর মতো UDP কোনো connection setup প্রক্রিয়া বা error correction মেকানিজম ব্যবহার করে না। তবে, UDP ডাটাগ্রাম হ্যান্ডলিং এবং ত্রুটি সনাক্তকরণের জন্য কিছু নির্দিষ্ট প্রক্রিয়া অনুসরণ করে।
UDP ডাটাগ্রাম হ্যান্ডলিং করার সময় কয়েকটি গুরুত্বপূর্ণ দিক অনুসরণ করে:
Datagram Structure:
Datagram Transmission:
Stateless Handling:
No Flow Control:
UDP ত্রুটি সংশোধন না করলেও, এটি ত্রুটি সনাক্তকরণের জন্য Checksum ব্যবহার করে। এটি নিশ্চিত করে যে ডাটাগ্রামটি সঠিকভাবে ডেলিভার হয়েছে কিনা। ত্রুটি সনাক্তকরণের পদ্ধতি নিচে বিস্তারিতভাবে বর্ণনা করা হলো:
Checksum Field:
Checksum Calculation:
Error Detection and Handling:
একটি সাধারণ UDP সার্ভার- ক্লায়েন্ট প্রোগ্রাম যেখানে UDP ডাটাগ্রাম পাঠানো এবং Checksum-এর মাধ্যমে ত্রুটি চেক করা হয়:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int sockfd;
char buffer[1024];
struct sockaddr_in server_addr, client_addr;
socklen_t addr_len = sizeof(client_addr);
char *message = "Hello from server";
// Socket তৈরি করা
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 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);
// Binding করা
if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Server is listening on port %d\n", PORT);
// ডেটা গ্রহণ করা
int n = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*)&client_addr, &addr_len);
buffer[n] = '\0';
printf("Client: %s\n", buffer);
// ডেটা পাঠানো
sendto(sockfd, message, strlen(message), 0, (struct sockaddr*)&client_addr, addr_len);
printf("Hello message sent to client\n");
// Socket বন্ধ করা
close(sockfd);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int sockfd;
char buffer[1024];
struct sockaddr_in serv_addr;
socklen_t addr_len = sizeof(serv_addr);
char *message = "Hello from client";
// Socket তৈরি করা
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// সার্ভার ঠিকানা সেটআপ করা
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// ডেটা পাঠানো
sendto(sockfd, message, strlen(message), 0, (struct sockaddr*)&serv_addr, addr_len);
printf("Message sent to server\n");
// ডেটা গ্রহণ করা
int n = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*)&serv_addr, &addr_len);
buffer[n] = '\0';
printf("Server: %s\n", buffer);
// Socket বন্ধ করা
close(sockfd);
return 0;
}
common.read_more