यहां हम एक ऐसा सिस्टम बनाएंगे जहां एक क्लाइंट और एक सर्वर होगा। क्लाइंट सर्वर को एक स्ट्रिंग भेजेगा, सर्वर उस स्ट्रिंग को रिवर्स करेगा और वापस क्लाइंट को भेज देगा।
इसके लिए हम सॉकेट प्रोग्रामिंग की अवधारणा का उपयोग करेंगे। क्लाइंट-सर्वर कनेक्शन स्थापित करने के लिए हमें एक पोर्ट बनाना होगा। पोर्ट नंबर एक मनमाना नंबर होता है जिसका उपयोग सॉकेट द्वारा किया जाता है। कनेक्शन स्थापित करने के लिए क्लाइंट और सर्वर दोनों को एक ही पोर्ट का उपयोग करना होगा।
प्रोग्राम शुरू करने के लिए, पहले सर्वर प्रोग्राम चलाएं:
gcc Server.c -o server
फिर क्लाइंट प्रोग्राम चलाएं:
gcc Client.c -o client
अब सर्वर क्लाइंट से स्ट्रिंग का इंतजार करेगा। क्लाइंट साइड से एक स्ट्रिंग इनपुट के रूप में लेनी होगी, फिर यह ट्रांसफर होगी। सर्वर स्ट्रिंग को प्रिंट करेगा और रिवर्स स्ट्रिंग भी भेजेगा। उसके बाद क्लाइंट सर्वर से प्राप्त रिवर्स स्ट्रिंग को प्रिंट करेगा।
उदाहरण: क्लाइंट साइड कोड
// Client Side Code
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#define PORT 4000
int main() {
struct sockaddr_in address;
int my_socket = 0, valread;
struct sockaddr_in server_address;
char str[100];
int l;
printf("Enter a String: ");
fgets(str, 100, stdin); // न्यू लाइन कैरेक्टर दबाए जाने तक स्ट्रिंग पढ़ें
char buffer[1024] = { 0 }; // बफर बनाएं और 0 से भरें
// सॉकेट फाइल डिस्क्रिप्टर बनाना
if ((my_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("\nUnable to create Socket \n");
return -1;
}
memset(&server_address, '0', sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_port = htons(PORT);
if (inet_pton(AF_INET, "127.0.0.1", &server_address.sin_addr) <= 0) {
printf("\nThe address is not supported \n");
return -1;
}
// सॉकेट कनेक्ट करना
if (connect(my_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
printf("\nUnable to connect to the server \n");
return -1;
}
l = strlen(str);
send(my_socket, str, sizeof(str), 0); // सर्वर साइड को मैसेज भेजें
valread = read(my_socket, str, l); // सर्वर द्वारा भेजा गया मैसेज पढ़ें
printf("%s\n", str);
return 0;
}
उदाहरण: सर्वर साइड कोड
// Server Side Code
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#define PORT 4000
char *strrev(char *str) {
char *p1, *p2;
if (!str || !*str)
return str;
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) {
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
return str;
}
int main() {
int server_fd, new_socket, valread;
struct sockaddr_in address;
char str[100];
int addrlen = sizeof(address);
char buffer[1024] = { 0 };
int i, j, temp;
int l;
char* message = "Welcome to the server"; // प्रारंभिक संदेश
// सॉकेट फाइल डिस्क्रिप्टर बनाना
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("Socket connection failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) { // सॉकेट 4000 के साथ बाइंड
perror("Unable to bind with the socket 4000");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 3) < 0) {
perror("Listening.....");
exit(EXIT_FAILURE);
}
if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) {
perror("Accept");
exit(EXIT_FAILURE);
}
// क्लाइंट द्वारा भेजी गई स्ट्रिंग पढ़ें
valread = read(new_socket, str, sizeof(str));
l = strlen(str);
printf("\nString sent by client: %s\n", str);
strrev(str); // स्ट्रिंग रिवर्स करें
send(new_socket, str, sizeof(str), 0);
printf("\nReversed String is sent\n");
return 0;
}
आउटपुट

यह उदाहरण दर्शाता है कि कैसे TCP सॉकेट का उपयोग करके क्लाइंट-सर्वर आर्किटेक्चर में डेटा का आदान-प्रदान किया जा सकता है। सर्वर स्ट्रिंग को रिवर्स करने के लिए XOR स्वैप एल्गोरिदम का उपयोग करता है।