简单的客户端/服务器C程序无法正确通信

时间:2017-02-23 00:14:31

标签: c client-server

我试图在C中设置客户端/服务器程序并编译所有内容,但我无法正确输出。目前,它只输出我的printf语句而不输出客户端中输入的实际字符串。它应该让客户端接收三个字符串并将它们发送到服务器,服务器检查它们是否全部是小写字符。如果不是,则输出无效的字符串消息。如果是,请计算元音数量,并将所有结果发送给客户端。它对我来说是正确的,但我不明白为什么它不起作用。 客户代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>

struct Client
{
  int l[1];          // stores number of vowels
  int m[1];          // stores number of vowels
  int n[1];          // stores number of vowels  
  char charbuff1[6]; // buffer holds a character
  char outchar1[7];  // server puts string here
  char charbuff2[6]; // buffer holds a character
  char outchar2[7];  // server puts string here
  char charbuff3[6]; // buffer holds a character
  char outchar3[7];  // server puts string here
}
inst;
main (void)
{
  memset(inst.charbuff1,0,6);
  memset(inst.outchar1,0,7);
  memset(inst.charbuff2,0,6);
  memset(inst.outchar2,0,7);
  memset(inst.charbuff3,0,6);
  memset(inst.outchar3,0,7);
  int fda; // to write to server
  int fdb; // to read response from server
  struct Client;
  int i;

  if((fda=open("FIFO1", O_WRONLY))<0) //open fifo to write to server
     printf("cant open fifo to write");

  if((fdb=open("FIFO2", O_RDONLY))<0) //open fifo to read from server
     printf("cant open fifo to read");

  printf("Client: Please enter up to 6 lowercase characters: ");
  for(i=0;i<6;i++) //for loop to take the first input
  {
    scanf("%c", &inst.charbuff1[i]);
  }
  printf("Client: Please enter up to 6 lowercase characters: ");
  for(i=0;i<6;i++) //for loop to take the second input
  {
    scanf("%c", &inst.charbuff2[i]);
  }
  printf("Client: Please enter up to 6 lowercase characters: ");
  for(i=0;i<6;i++) //for loop to take the third input
  {
    scanf("%c", &inst.charbuff3[i]);
  }
  write(fda, &inst, sizeof(inst)); //write results to the struct

  printf("\nClient: Got the characters sent, now waiting for response ");
  read(fdb, &inst, sizeof(inst)); //read results from server struct
  printf("\nClient: received from server %s", inst.outchar1);
  printf("\nClient: Was this a valid string? ");
  if(inst.l[1] = 9) //check if first string had an invalid character
  {
    printf("No");
  }
  else
  {
    printf("Yes");
    printf("\nClient: The number of vowels in the string is: %d", inst.l[1]);
  }
  printf("\nClient: The number of vowels in the string is: %d", inst.l[1]);

  printf("\nClient: received from server %s", inst.outchar2);
  printf("\nClient: Was this a valid string? ");
  if(inst.m[1] = 9) //check if second string had an invalid character
  {
    printf("No");
  }
  else
  {
    printf("Yes");
    printf("\nClient: The number of vowels in the string is: %d", inst.m[1]);
  }
  printf("\nClient: received from server %s", inst.outchar3);
  printf("\nClient: Was this a valid string? ");
  if(inst.n[1] = 9) //check if third string had an invalid character
  {
    printf("No");
  }
  else
  {
    printf("Yes");
    printf("\nClient: The number of vowels in the string is: %d", inst.n[1]);
  }

  close(fda);
  close(fdb);

  printf ("\nall done!\n");

}

服务器代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>

struct Server
{
  int l[1];          // stores number of vowels
  int m[1];          // stores number of vowels
  int n[1];          // stores number of vowels
  char charbuff1[6]; // buffer holds a character
  char outchar1[7];  // server puts string here
  char charbuff2[6]; // buffer holds a character
  char outchar2[7];  // server puts string here
  char charbuff3[6]; // buffer holds a character
  char outchar3[7];  // server puts string here
}
  inst;
  main (void)
  {
  memset(inst.charbuff1,0,6);
  memset(inst.outchar1,0,7);
  memset(inst.charbuff2,0,6);
  memset(inst.outchar2,0,7);
  memset(inst.charbuff3,0,6);
  memset(inst.outchar3,0,7);
  struct Server;
  int i;
  int fda;      // to read from client
  int fdb;      // to write to client

  /* Create the fifos and open them  */
  if ((mkfifo("FIFO1",0666)<0 && errno != EEXIST))
    {
    perror("cant create FIFO1");
    exit(-1);
    }

   if ((mkfifo("FIFO2",0666)<0 && errno != EEXIST))
    {
    perror("cant create FIFO2");
    exit(-1);
    }

  if((fda=open("FIFO1", O_RDONLY))<0)
     printf("cant open fifo to write");

  if((fdb=open("FIFO2", O_WRONLY))<0)
     printf("cant open fifo to read");

  read(fda, &inst, sizeof(inst)); //read the struct from client


  for( i = 0; i<6; i++) //for loop to write the first string from charbuff array to outchar array
  {
    inst.outchar1[i] = inst.charbuff1[i];
    inst.outchar1[6] = 0;
  }
  printf("\nServer: first string is: %s", inst.outchar1);

  inst.l[1] = 0;

  for( i = 0; i<6; i++) //for loop to check for non-lowercase characters
  {
  if(inst.outchar1[i] < 'a' && inst.outchar1[i] > 'z') //if a character isn't lowercase, set l to 9
  {
    inst.l[1] = 9;
    break;
  }
  else if(inst.outchar1[i] = 'a' || 'e' || 'i' || 'o' || 'u') //if a character is a vowel, increment l by 1
  {
    inst.l[1]++;
  }
  else //if a character is a lowercase consonant, do nothing
  {
   inst.l[1];
  }
  }
  printf("\nServer: Checked for uppercase letters");

  if(inst.l[1] = 9) //if an invalid character was encountered
  {
    printf("\nServer: There are uppercase letters");
  }
  else //if no invalid character was encountered
  {
    printf("\nServer: There are no uppercase letters");
    printf("\nServer: The humber of vowels are: %d", inst.l[1]);
  }

  for( i = 0; i<6; i++) //for loop to write the second string from charbuff array to outchar array
  {
    inst.outchar2[i] = inst.charbuff2[i];
    inst.outchar2[6] = 0;
  }
  printf("\nServer: second string is: %s", inst.outchar2);

  inst.m[1] = 0;

  for( i = 0; i<6; i++) //for loop to check for non-lowercase characters
  {
  if(inst.outchar1[i] < 'a' && inst.outchar1[i] > 'z') //if a character isn't lowercase, set m to 9
  {
    inst.m[1] = 9;
    break;
  }
  else if(inst.outchar2[i] = 'a' || 'e' || 'i' || 'o' || 'u') //if a character is a vowel, increment m by 1
  {
    inst.m[1]++;
  }
  else //if a character is a lowercase consonant, do nothing
  {
    inst.m[1];
  }
  }
  printf("\nServer: Checked for uppercase letters");

  if(inst.m[1] = 9) //if an invalid character was encountered
  {
    printf("\nServer: There are uppercase letters");
  }
  else //if no invalid character was encountered
  {
    printf("\nServer: There are no uppercase letters");
    printf("\nServer: The humber of vowels are: %d", inst.m[1]);
  }

  for( i = 0; i<6; i++) //for loop to write the third string from charbuff array to outchar array
  {
    inst.outchar3[i] = inst.charbuff3[i];
    inst.outchar3[6] = 0;
  }
  printf("\nServer: third string is: %s", inst.outchar3);

  inst.n[1] = 0;

  for( i = 0; i<6; i++) //for loop to check for non-lowercase characters
  {
  if(inst.outchar1[i] < 'a' && inst.outchar1[i] > 'z') //if a character isn't lowercase, set n to 9
  {
    inst.n[1] = 9;
    break;
  }
  else if(inst.outchar3[i] = 'a' || 'e' || 'i' || 'o' || 'u') //if a character is a vowel, increment n by 1
  {
    inst.n[1]++;
  }
  else
  {
    inst.n[1]; //if a character is a lowercase consonant, do nothing
  }
  }
  printf("\nServer: Checked for uppercase letters");

  if(inst.n[1] = 9) //if an invalid character was encountered
  {
    printf("\nServer: There are uppercase letters");
  }
  else //if no invalid character was encountered
  {
    printf("\nServer: There are no uppercase letters");
    printf("\nServer: The humber of vowels are: %d", inst.n[1]);
  }
  write(fdb, &inst, sizeof(inst));
  printf("\nServer: This says I am ready to close.\n ");

  close(fda);
  close(fdb);
  unlink("FIFO1");
  unlink("FIFO2");

    return 0;
}

0 个答案:

没有答案