2016-01-24 209 views
-1

我無法從服務器/客戶端程序讀取客戶端的值。用戶應該在客戶端進入一個國家,並且服務器應該處理該值,然後返回與該國相關的信息(資本,貨幣)。無法從客戶端讀取數據到服務器

對於我的程序,服務器能夠第一次返回正確的數據。例如,在中國的用戶密鑰,服務器將返回大寫北京等。

但是,當用戶第二次輸入例如'德國'時,服務器根本不返回任何數據。

希望你們能識別我的代碼中的錯誤。提前致謝!

在此先感謝!

+1

你確定你已經用盡了所有的調試選項嗎?調試是獲得經驗的寶貴技能,不應該輕易外包給Stackoverflow。例如,你是否在調試器中運行服務器和客戶端,和/或在更多的調試語句中添加了哪些內容?例如,您未與我們分享的簡單數據點是服務器是否正確接收第二個請求。如果是這樣,它是否會在調試步驟中第二次發送正確的響應,等等。 – kaylum

+0

那麼,客戶端中的'while(1)'循環無法從服務器返回多個結果 - 在接收到第一個結果後,您顯式關閉客戶端套接字'close(clientFd);'。正如@kaylum所建議的那樣,您在使用調試器逐步瀏覽客戶端代碼時應該注意到這一點。 –

回答

0

客戶端方,打印後收到答案你正在關閉clientFd而不是嘗試重新連接以備後用。實際上第二次write正在關閉文件描述符。一種解決方案是:

while (1) { 
    /* Create a socket, bidirectional, default protocol */ 
    clientFd = socket(AF_LOCAL, SOCK_STREAM, DEFAULT_PROTOCOL); 

    do { /* Loop until a connection is made with the server */ 
     result = connect(clientFd, serverSockAddrPtr, serverLen); 
     printf("Attempting to connect...\n"); 
     if (result == -1) sleep(1); /* Wait and then try again */ 
    } while (result == -1); 

    char country[300]; 

    printf("%s \n", " "); 
    printf("Please enter country > "); 
    fflush(stdout); 
    fgets(country, sizeof(country), stdin); 
    printf("%s \n", " "); 

    if (0 == strcmp(country, "end\n")) { 
     printf("Thank you for using country services\n"); 
     exit(0); 
    } else { 
     write(clientFd, country, strlen(country)); 
     parse(clientFd); 
    } 

    close(clientFd); 
    printf("%d\n", clientFd); 
    clientFd = 0; 
} 
+0

非常感謝!深表謝意! – Peter12345

相關問題