2013-01-15 83 views
-4

以下c socket編程代碼一直循環而不用等待從文件描述符中獲取數據。這是服務器端套接字編程的一部分。它不等待接受客戶的請求。請幫忙。如何解決從客戶端讀取數據的套接字編程錯誤?

代碼:

while(1){ 
    bzero(buffer,256); 
    read(newsockfd,buffer,256); 
    printf("%s",buffer); 
    if(n<0){ 
    printf("reading client message failed\n");  
    return 0; 
    } 
    printf("success\n"); 

} 
+1

我不知道你問... – tier1

+0

'bzero'已過時,使用'memset'而不是 –

+0

看看輸出服務器代碼是不是等待客戶端數據讀取。 –

回答

1

你不是read()的返回值分配給您的n變量,但你期待n莫名其妙地知道什麼時候read()失敗。修正了任務,然後還修復您的循環邏輯來僅輸出實際上讀取的字節數,如:

while(1){ 
    memset(buffer,0,256); 
    printf("sssssssss\n"); 
    n = read(newsockfd,buffer,256); 
    if(n<0){ 
    // if your sockeet is non-blocking then uncomment this code... 
    /* 
    if ((errno == EAGAIN) || (errno == EWOULDBLOCK)){ 
     fd_set rfd; 
     FD_ZERO(&rfd); 
     FD_SET(newsockfd, &rfd); 

     struct timeval timeout; 
     timeout.tv_sec = 5; 
     timeout.tv_usec = 0; 

     if (select(newsockfd+1, &rfd, NULL, NULL, &timeout) > 0){ 
      continue; 
     } 
    } 
    */ 
    printf("reading client message failed\n");  
    return 0; 
    } 
    if(n==0){ 
     break; 
    } 
    printf("%.*s\n",n,buffer); 
    printf("succcccccccccccccc\n"); 
} 
相關問題