Computer >> Máy Tính >  >> Lập trình >> C ++

Đảo ngược một chuỗi trong C / C ++ sử dụng mô hình Máy chủ Khách hàng

Ở đây chúng ta sẽ xem cách chúng ta có thể tạo một hệ thống, trong đó chúng ta sẽ tạo một máy khách và một máy chủ, và máy khách có thể gửi một chuỗi đến máy chủ và máy chủ sẽ đảo ngược chuỗi và quay trở lại máy khách.

Ở đây chúng ta sẽ sử dụng khái niệm lập trình socket. Để tạo kết nối máy chủ khách hàng, chúng ta phải tạo cổng. Số cổng là một số tùy ý có thể được sử dụng bởi ổ cắm. Chúng tôi phải sử dụng cùng một cổng cho máy khách và máy chủ để thiết lập kết nối.

Để bắt đầu chương trình, trước tiên hãy khởi động chương trình máy chủ -

gcc Server.c –o server

Sau đó bắt đầu chương trình khách hàng -

gcc Client.c –o server

Bây giờ máy chủ sẽ đợi một chuỗi từ máy khách. Chúng ta phải lấy một chuỗi làm đầu vào từ phía máy khách, sau đó nó sẽ được chuyển. Máy chủ sẽ in chuỗi và cũng gửi chuỗi đã đảo ngược. Sau đó ứng dụng khách sẽ in chuỗi đã đảo ngược từ máy chủ.

Ví dụ

//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
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); //read string until new line character is pressed
   char buffer[1024] = { 0 }; //create a buffer and fill with 0
   // Creating socket file descriptor
   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;
   }
   // connect the socket
   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); // send message to server side
   valread = read(my_socket, str, l); // read message sent by server
   printf("%s\n", str);
}

Ví dụ

//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;
}
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"; //initial message
   // Creating socket file descriptor
   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) { //attack with socket 4000
      perror("Unable to bind with the socket 4000");
      exit(EXIT_FAILURE);
   }
   if (listen(server_fd, 3) < 0) {
      perror("Listning.....");
      exit(EXIT_FAILURE);
   }
   if ((new_socket = accept(server_fd, (struct sockaddr*)&address,(socklen_t*)&addrlen)) < 0) {
      perror("Accept");
      exit(EXIT_FAILURE);
   }
   // read string send by client
   valread = read(new_socket, str, sizeof(str));
   l = strlen(str);
   printf("\nString sent by client:%s\n", str);
   strrev(str); //reverse the string
   send(new_socket, str, sizeof(str), 0);
   printf("\nReversed Strng is sent\n");
}

Đầu ra

Đảo ngược một chuỗi trong C / C ++ sử dụng mô hình Máy chủ Khách hàng