作者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)