2016-04-01 102 views
0

我在寫一個簡單的客戶端服務器程序。我的服務器使用telnet工作正常,但我的客戶端只能發送字節,不能接收它們。有什麼明顯的我失蹤了嗎?我認爲這可能是因爲我以某種方式使用了recv函數,但對我來說並不明顯。 recv函數始終獲得0個字節。我應該補充一點,recv函數不會阻塞,但接收到的字節數始終爲零。爲什麼我的客戶端沒有收到任何字節?

下面是客戶端主函數中的代碼片段。功能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

什麼是錯誤的實際symptomps? – SergeyA

+0

'recv'函數不會阻塞,但總是'numbytes = 0'。 – FSB

+0

當我用'char buf [MAXDATASIZE] =「」;''初始化buf時,我想知道'strlen(buf) ? –

回答

2

替換爲「strlen的(BUF) '的sizeof(BUF)-1'

相關問題