2017-05-22 1 views
0

私は、クライアントからサーバーに送信する文字列を受け入れる基本的なLinuxソケットプログラムを持っています。 「quit」と入力すると、クライアントプログラムは終了しますが、プログラムを終了するまで、無限に "quit"が表示されます。私は文字列を正しく読み込んでいないか、論理がオフです。あなたが前recv"quit"文字列が入力されたときにサーバプログラムが終了しない

recvmemset BUFに必要

コードセクション...

while (1) 
{ 
    //fetch message from client and write to stdout 
    num_client_bytes = recv(client_sockfd, buf, LEN, 0); 

    if (-1 == num_client_bytes) 
    { 
     perror("server-- recv failed"); 
    } 
    else 
    { 
     printf("client msg: %s", buf); 

     if (0 == strcmp(buf, "quit\n")) 
     { 
      break; 
     } 

    } 
} 

//remove local socket file and close sockets 
unlink(SOCKET_NAME); 
close(client_sockfd); 
close(server_sockfd); 
return 0; 
+2

改行も送信してもよろしいですか?または文字列ターミネータ?あなたはどのように文字列を送るのですか? –

+0

printf()のプリントとbufのstrlen()の結果はどうなりますか? – Scooter

+0

@Someprogrammerdude私が知る限り、はい。私は終端ヌルを取り除かない。 – Maddy

答えて

2

はまた、あなたがrecvかの読み取りを確認する必要があり、ソケットから読み込む文字列の最後に を'\0'を追加しません4バイト全体を変更し、次に変更します。

strcmp(buf, "quit\n") 

strncmp(buf, "quit\n",4)// if you are not sure client sends \n 
+0

それはクライアントが送信したものによって異なります – LPs

+0

それは完璧に、ありがとう! – Maddy

+0

'あなたはrecvの前にbufをmemsetする必要があります' NO!これはどこから来るのですか? – ThingyWotsit

関連する問題