BSD C服务器不比较缓冲区中的字符串

时间:2012-09-19 19:12:20

标签: c bsd

所以我试图将缓冲区与strcmp的字符串进行比较。我希望服务器以特殊的方式响应客户端说“man”的内容,否则只需回复即可。我看不出我做错了什么,但我的输出总是“得到它”而不是男人,即使我从客户输入 man 侧。

void dostuff (int sock)
{
   int n;
   char buffer[256];
   bzero(buffer,256);
   n = read(sock,buffer,255);
    //make list match each get text and match to user
    if (n < 0) error("ERROR reading from socket");
    if (!strcmp ( buffer, "man" )) n = write(sock,"you are manly",18);
    else{  printf("Here is the message: %s\n",buffer);
        n = write(sock,"got it",18);};
           //n = write(sock,"you are gay",18);

        if (n < 0) error("ERROR writing to socket");
     /*

   if (n < 0) error("ERROR reading from socket");
   printf("Here is the message: %s\n",buffer);
   n = write(sock,"got it",18);
   if (n < 0) error("ERROR writing to socket");*/
}

2 个答案:

答案 0 :(得分:3)

strcmp假定C以零结尾的字符串,你并不总是从套接字获取(假设TCP,它是一个字节流,并且可以在向您返回数据时以任意方式拆分该流)。

检查收到的块的大小(代码中的n)至少为3,然后使用带有显式大小参数的memcmp

答案 1 :(得分:3)

问题是您在客户端中使用fgets()来获取要发送到服务器的字符串。该字符串将具有\n和结尾,并且与“man”不匹配。

要删除缓冲区末尾的\n,您可以执行以下操作:

strtok (buffer, "\n");会将\n替换为NULL,以便您的strcmp()能够正常运作。