Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单客户端/服务器C程序无法正确通信_C_Client Server - Fatal编程技术网

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

简单客户端/服务器C程序无法正确通信,c,client-server,C,Client Server,我试图用C语言建立一个客户机/服务器程序,并对所有内容进行编译,但无法正确输出。目前,它只输出我的printf语句,而不是客户机中输入的实际字符串。它应该让客户端接收三个字符串并将它们发送到服务器,服务器检查它们是否都是小写字符。如果不是,则输出无效的字符串消息。如果是这样,计算元音的数量,并将所有结果发送给客户端。在我看来它是正确的,但我不明白为什么它不起作用。 客户端代码: #include <sys/types.h> #include <sys/stat.h> #i

我试图用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");

}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
结构客户端
{
int l[1];//存储元音的数量
int m[1];//存储元音的数量
int n[1];//存储元音的数量
char charbuff1[6];//缓冲区保存一个字符
char outchar1[7];//服务器将字符串放在这里
char charbuff2[6];//缓冲区保存一个字符
char outchar2[7];//服务器将字符串放在这里
char charbuff3[6];//缓冲区保存一个字符
char outchar3[7];//服务器将字符串放在这里
}
研究所;
主(空)
{
memset(仪表1,0,6);
memset(inst.outchar1,0,7);
memset(仪表2,0,6);
memset(inst.outchar2,0,7);
memset(仪表3,0,6);
memset(inst.outchar3,0,7);
int fda;//写入服务器
int fdb;//从服务器读取响应
结构客户端;
int i;

如果((fda=开放(“FIFO1”,仅限O_))请给出输入、预期输出和实际输出。在客户端程序中,您不能跳过每行输入末尾的换行符。此外,它要求最多输入6个字符,但用户必须准确输入6个字符——它们无法发出完成的信号。也许您应该使用
fgets()
一次读取一行,而不是
scanf()
一次读取一个字符。我的预期输入是三个字符串,共6个字母字符。如果字符串只有小写字符,则预期输出是输入的三个字符串,共6个字符,如果只有小写字符,则输出字符串中的元音数。我当前的输出是:我将代码更改为将大小为1的数组替换为检查元音是否为int,并将for循环更改为fgets()语句,我的代码现在部分工作
#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;
}