作者chchwy (mat)
看板NTUE-CS100
標題Re: [課業] ftp兩三事
時間Thu Jun 4 02:25:24 2009
我用簡化概念來代表程式
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)