1

そのため、strcmp を使用してバッファーを文字列と比較しようとしています。クライアントが「男」と言ったときにサーバーが特別な方法で応答し、それ以外の場合は単に応答するようにします。私は何が間違っているのかわかりませんが、私の出力は常に「わかっ」であり、クライアント側からを入力してもではありません。

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()、サーバーに送信する文字列を取得するためにクライアントで使用していることです。文字列には a\nと末尾があり、「man」とは一致しません。

バッファの最後にあるを削除する\nには、次のようにします。

strtok (buffer, "\n");\nをaに置き換えるNULLので、機能しますstrcmp()

于 2012-09-19T19:33:14.007 に答える