用于检查给定字符串是否为回文的 TCP 客户端-服务器程序

回文是一个单词、短语或序列,其向后读与向前读相同,例如,“女士”或“护士跑”。

TCP 客户端-服务器程序

客户端连接的客户端和服务器配置向服务器发送一个字符串,服务器显示原始字符串并通过套接字连接向客户端发送确认该字符串是否为回文。

输入- WOW

输出- 回文

输入- soap

输出- 不是回文

它是如何工作的?

  • 首先,建立客户端-服务器连接。

  • 建立连接后,客户端利用发送系统功能将用户输入的字符串传送到服务器。

  • 服务器将在客户端等待客户端提供的字符串。

  • 读取系统调用时所使用的服务器读取字符串。

  • 之后,服务器判断字符串是否为回文并将确认返回给客户端。

编译

  • 首先将服务器应用程序作为 GCC 服务器运行。

server./server c –o
  • 在不同的终端上运行 GCC 客户端程序。

client./client c -o
  • 服务器软件正在等待客户端的字符串。

  • 客户端,输入字符串。

  • 原始字符串将由服务器软件打印。

  • 结果将由客户端软件打印。

TCP服务器

#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
main(){
   struct sockaddr_in client, server;
   int s1, n, sock, g, j, left, right, flag;
   char b11[20], b2[10], b3[10], b4[10];

   s1 = socket(AF_INET, SOCK_STREAM, 0);
   server.sin_family = AF_INET;
   server.sin_port = 20000;
   server.sin_addr.s_addr = inet_addr("127.0.0.1");
   bind(s1, (struct sockaddr*)&server, sizeof server);
   listen(s1, 1);
   n = sizeof client;
   sock = accept(s1, (struct sockaddr*)&client, &n);
   for (;;) {
      recv(sock, b11, sizeof(b1), 0);

      printf("\nThe string received is:%s\n", b11);
      if (strlen(b11) == 0)
         flag = 1;
      else {
         left = 0;
         right = strlen(b11) - 1;
         flag = 1;
         while (left < right && flag) {
            if (b11[left] != b11[right])
               flag = 0;
               else {
                  left++;
                  right--;
            }
         }
      }
      send(sock, &flag, sizeof(int), 0);
      break;
   }
   close(sock);
   close(s1);
}

客户

#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
main(){
   struct sockaddr_in client;
   int s, flag;
   char buffer[20];
   s = socket(AF_NET, SOCK_STREAM, 0);
   client.sin_family = AF_NET;
   client.sin_port = 20000;
   client.sin_addr.s_addr = inet_addr("127.0.0.1");
   connect(s, (struct sockaddr*)&client, sizeof client);
   for (;;) {
      printf("\nEnter a string to check palindrome: ");
      scanf("%s", buffer);

      printf("\nClient: %s", buffer);
      send(s, buffer, sizeof(buffer), 0);
      recv(s, &flag, sizeof(int), 0);

      if (flag == 1) {
         printf("\nServer: The string is Palindrome.\n");
         break;
      }
      else {
         printf("\nServer: The string isn't a palindrome.\n");
         break;
      }
   }
   close(s);
}