-1
我無法從服務器/客戶端程序讀取客戶端的值。用戶應該在客戶端進入一個國家,並且服務器應該處理該值,然後返回與該國相關的信息(資本,貨幣)。無法從客戶端讀取數據到服務器
對於我的程序,服務器能夠第一次返回正確的數據。例如,在中國的用戶密鑰,服務器將返回大寫北京等。
但是,當用戶第二次輸入例如'德國'時,服務器根本不返回任何數據。
希望你們能識別我的代碼中的錯誤。提前致謝!
在此先感謝!
我無法從服務器/客戶端程序讀取客戶端的值。用戶應該在客戶端進入一個國家,並且服務器應該處理該值,然後返回與該國相關的信息(資本,貨幣)。無法從客戶端讀取數據到服務器
對於我的程序,服務器能夠第一次返回正確的數據。例如,在中國的用戶密鑰,服務器將返回大寫北京等。
但是,當用戶第二次輸入例如'德國'時,服務器根本不返回任何數據。
希望你們能識別我的代碼中的錯誤。提前致謝!
在此先感謝!
對客戶端方,打印後收到答案你正在關閉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;
}
非常感謝!深表謝意! – Peter12345
你確定你已經用盡了所有的調試選項嗎?調試是獲得經驗的寶貴技能,不應該輕易外包給Stackoverflow。例如,你是否在調試器中運行服務器和客戶端,和/或在更多的調試語句中添加了哪些內容?例如,您未與我們分享的簡單數據點是服務器是否正確接收第二個請求。如果是這樣,它是否會在調試步驟中第二次發送正確的響應,等等。 – kaylum
那麼,客戶端中的'while(1)'循環無法從服務器返回多個結果 - 在接收到第一個結果後,您顯式關閉客戶端套接字'close(clientFd);'。正如@kaylum所建議的那樣,您在使用調試器逐步瀏覽客戶端代碼時應該注意到這一點。 –