1

所以我试图将缓冲区与 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");*/
}
4

2 回答 2

3

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

检查接收到的块的大小(n在您的代码中)至少与显式大小参数一起3使用。memcmp

于 2012-09-19T19:26:22.817 回答
3

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

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

strtok (buffer, "\n");它将\n用 a替换,NULL这样你strcmp()就可以工作了。

于 2012-09-19T19:33:14.007 回答