看板 NTUE-CS100 關於我們 聯絡資訊
我用簡化概念來代表程式 Server Client int main(){ Socket(); Bind(); Listen(); int main(){ for(;;){ sockfd = Socket(); connfd = Accept(); Connect(); servWork( connfd ); cliWork( sockfd ); } Close(); Close(); } } 我想大家很清楚看到,程式攤開來,從頭到尾都是屁話。 只有兩個地方 - servWork() 跟 cliWork() 是程式結構的核心。 ============================================= ftp下一個指令後,作業流程應該會這樣跑 Server Client 1. client讀入指令 2. client將指令送給server <--- 3. server讀取指令 4. server針對指令做處理 5. server將結果寫回client ----> 6. client接收server傳過來的結果 7. client對結果做處理 所以Server的工作就是用一個無限迴圈 不斷針對Client送來的指令 接收->處理->寫回->接收->處理.... Server程式結構核心 ====================================== void servWork( int connfd ){ //socket要記得傳進來 while(1){ //無限迴圈 char cmd[1024]; //指令 readString( connfd, cmd ); //從socket接收指令 //針對不同的指令,做不同的反應,呼叫不同的函數 //處理跟寫回client都封在對應的函數裡 if(strcmp(cmd,"dir")==0){ serv_dir( connfd ); }else if(strcmp(cmd, "get")==0){ serv_get( connfd ); }else if ... } } ======================================== Client則是另外一種迴圈 鍵盤讀指令->送指令->收結果->讀指令->送指令->收結果 void cliWork(int sockfd ){ while(1){ char cmd[1024]; //指令 printf("請輸入指令: "); scanf("%s", cmd); //從鍵盤讀指令 writeString(sockfd, cmd ); //將指令寫進socket //也就是送指令給server //同樣針對不同的指令做不同的反應 if(strcmp(cmd,"dir")==0){ cli_dir( sockfd ); }else if(strcmp(cmd,"get")==0){ cli_get( sockfd ); }else if(strcmp(cmd,"put")==0){ cli_put( sockfd ); }else .... } } -- 夜精小德 Char - 巨龍之喉 (前月神殿) PvP -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.68.15.209 ※ 編輯: chchwy 來自: 140.115.50.29 (06/15 14:14)