2016-04-01 13 views
0

私は単純なクライアント - サーバープログラムを書いています。私のサーバはtelnetでうまく動作しますが、クライアントはバイトを送るだけで、受け取ることはできません。明白な何かがありますか?私はそれが何らかの形でrecv関数の私の使用のためかもしれないと思うが、それは私には明らかではない。 recv関数は一貫して0バイトを取得します。 recv関数がブロックされていないのに、受け取ったバイト数が常にゼロであることを付け加えておきます。クライアントがバイトを受信しないのはなぜですか?

クライアントのmain関数内のコードのスニペットは次のとおりです。機能changeIPOrPortはサーバのIPアドレスとポートを設定し、サーバがクライアントメッセージを受信するので正常に動作します。必要に応じてサーバーコードも投稿できます。

int main() { 

int client_fd, numbytes = 0; 
//int quit = 0; 
struct sockaddr_in their_addr; 
char response[MAXDATASIZE] = ""; 
char buf[MAXDATASIZE] = ""; 
size_t len = 0; 

/* Server config*/ 
their_addr.sin_family = AF_INET; 
memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero); 
printf("Configuring the server\n"); 
changeIPOrPort(&their_addr); 


printf("Hello! please input letters to know things about me.\n"); 
printf("Each character will give you a piece of information about me\n"); 
printf("%s\n", serviceInfo); //info string "UI"... 

/*create client socket*/ 
client_fd = socket(AF_INET, SOCK_STREAM, 0); 

if(connect(client_fd, (struct sockaddr *)&their_addr, sizeof(their_addr)) < 0) { 
    printf("\n Error : Connect Failed \n"); 
    return 1; 
} 

if(!fgets(response, sizeof (response), stdin)) { 
    printf("Error reading line.\n"); 
} 
else { 
    len = strlen(response); 
    if(response[len - 1] == '\n') { 
     response[len - 1] = '\0'; 
    } 
    printf("You entered the characters:%s\n", response); 
    printf("sending...\n"); 
    send(client_fd, response, len, 0); 

    numbytes = recv(client_fd, buf, strlen(buf), 0) ; 
    if(numbytes < 0) { 
     printf("Error receiving from server, quitting\n"); 
     exit(1); 
    } 
    else { 
     printf("Number of bytes received: %d\n", numbytes); 
     buf[numbytes] = '\0'; 
     printf("%s\n", buf); 
     printf("This is errno\n", errno); 
    } 
} 
close(client_fd); 
return 0; 
} 
+0

? – SergeyA

+0

'recv'関数はブロックされませんが、常に' numbytes = 0'がブロックされます。 – FSB

+0

bufが 'char buf [MAXDATASIZE] = "";で初期化されたときに' strlen(buf) ? –

答えて

2

で 'strlenを(BUF)' を交換してください 'のsizeof(bufに)-1' エラーの実際のsymptomps何

関連する問題