2013-11-03 28 views
0

我想做一個TCP文件傳輸連接,使客戶端可以選擇他想做什麼「任務」(列出目錄中的文件,上傳,下載一個文件),但是一旦他做出選擇就不會終止。這意味着他可以在每個環節做更多的選擇。有效的while循環條件客戶端選擇(TCP連接在Linux - C)

我的問題是,在我的實現在服務器端while循環的:

while(n= read(sd,rbuf,BUFLEN)){ 


    if (rbuf[0] == 'R'){//CHANGE DIR 
     //char *dircha; 

     //read(sd, rbuf, BUFLEN); 


     printf("ENTER change directory\n"); 
     //chdir(dircha);// this will change directory 
    } 

    if(rbuf[0] == 'L'){//LIST FILES 

     requiem[0] = 'I'; 
     requiem[1] = 20; 
     printf("TYPE: %c", requiem[0]); 
     write(sd, requiem , 2);.... //rest of code 

的RBUF犯規得到「清理」,並且仍然含有當他輸入他的選擇客戶端發出的人物,一旦進入while循環並選擇一個選項,它將永遠無法選擇另一個任務,因爲rbuf [0]永遠不會等於我所做的任何選擇。

我該怎麼做才能讓用戶做出多種選擇?非常感謝!

+0

'while(n = read(sd,rbuf,BUFLEN)){'n可能是負數。保重。 – wildplasser

+0

使用[select](http://en.wikipedia.org/wiki/Select_(Unix))可能會有幫助。 – Recker

回答

0
while(n= read(sd,rbuf,BUFLEN)){ 

不是實現您的協議的好方法。不能保證它只返回一個數據集。例如。它是可能的:

  • 由兩個或兩個以上write()read()返回數據,或從write()

  • read()只返回部分數據,您應該實施或者一些緩衝或更好編碼你的數據(例如,前綴總是隨後數據的類型或長度)。

  • +0

    是的,第一百萬次, –