2013-02-10 84 views
0

我在客戶端實現多客戶端連接的客戶端服務器聊天程序時遇到問題。問題是,我遇到的問題是,如何讓客戶知道鍵入內容?目前,我的printf語句沒有被輸出到屏幕上。有沒有一種方法可以通知客戶,可以不使用新行來輸入?c socket:刷新數據讓客戶端知道鍵入

這裏是有關代碼

客戶端

while(1) { 
    printf(">"); //this isn't being outputted 

    fd_set rfds; 
    FD_ZERO(&rfds); 

    FD_SET(serverSocket, &rfds); 
    FD_SET(0, &rfds); 

    if(select(serverSocket+1, &rfds, NULL, NULL, NULL) < 0) { 
     perror("select"); 
     exit(-1); 
    } 

    if (FD_ISSET(serverSocket, &rfds)) { 
    //recv data from server 
    } 
    else if (FD_ISSET(0, &rfds)) { 
    //read keyboard 
    } 
} 
+0

'printf(「>」);' - >>'fprintf(stderr,「> \ n」);'這是輸出。 – wildplasser 2013-02-10 00:55:10

+2

你可以在'printf'之後用'fflush(stdout);'嘗試一下嗎? – Ganesh 2013-02-10 00:57:23

+0

@wildplasser發佈您的解決方案,以便我可以標記爲答案。黑客的位,但我想它在這種情況下工作。除非有人有更好的選擇。 – theStig 2013-02-10 01:03:16

回答

1

由於標準輸出默認情況下,行緩衝,至少有兩個選擇:

  1. 寫入後顯式沖水沒有換行符的標準輸出。按照Ganeesh的建議嘗試fflush(stdout);
  2. 關閉整個程序的標準輸出緩衝。嘗試setvbuf(stdout, NULL, _IONBF, 0);。你可以在這裏看到一個例子:Is it safe to disable buffering with stdout and stderr?
+0

哇,我需要休息一下。思考fflush是一個壞主意,因爲我與標準輸入工作...但我不是。該printf將要stdout。謝謝 – theStig 2013-02-10 01:30:39