資源簡介
使用c語言簡單的實現(xiàn)了ftp功能,其中代碼簡單清晰。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define?TRUE?1
#define?dataLen?1024
char?user_cmd[10]cmd_arg[20];
char?buf[dataLen];
void?cmd_pwd(int?sockint?sockmsg);
void?cmd_dir(int?sockint?sockmsg);
void?cmd_cd(int?sockint?sockmsgchar?*dirName);
void?cmd_cdback(int?sockint?sockmsg);
void?cmd_help(int?sockint?sockmsg);
void?cmd_get(int?sockint?sockmsgchar?*fileName);
void?cmd_put(int?sockint?sockmsgchar?*fileName);
void?cmd_quit(int?sockint?sockmsg);
int?main(int?argcchar?*argv[])
{
??int?cmd_lenarg_len;
??int?sock?sockmsg;
??struct?sockaddr_in?server?servermsg;
??struct?hostent?*hp;
??
??sock=socket(AF_INETSOCK_STREAM0);
??sockmsg=socket(AF_INETSOCK_STREAM0);
??
??if?(sock<0||sockmsg<0)
??{
perror(“opening?stream?socket“);
exit(1);
??}
??hp?=?gethostbyname(argv[1]);
??if?(hp==0)
??{
fprintf(stderr“%s:unknown?host\n“argv[1]);
exit(2);
??}
??server.sin_family=AF_INET;
??server.sin_port=htons(atoi(argv[2]));
??memcpy((char*)&server.sin_addr?(char*)hp->h_addr?hp->h_length);
??
??servermsg.sin_family=AF_INET;
??servermsg.sin_port=htons(atoi(argv[2])+1);
??memcpy((char*)&servermsg.sin_addr?(char*)hp->h_addr?hp->h_length);
??if?(connect(sock(struct?sockaddr?*)&serversizeof?server)<0||connect(sockmsg(struct?sockaddr?*)&servermsgsizeof?servermsg)<0)
??{
? perror(“connecting?stream?socket“);
exit(1);
??}
??
??
??//Get?command?from?command?line?and?do?just?the?action
??while(TRUE)
??{
memset(user_cmd010);
memset(cmd_arg020);
//First?get?the?input?character?by?user
printf(“command:?“);
scanf(“%s“user_cmd);
cmd_len=strlen(user_cmd);
//Then?get?the?command?character?and?the?argument
if(strcmp(user_cmd“quit“)==0)???? //command?“quit“
{
cmd_quit(socksockmsg);
close(sockmsg);
close(sock);
printf(“connection?closed\n\n“);
exit(0);
} ?
else?if(strcmp(user_cmd“?“)==0)?? //command?“?“
{
cmd_help(socksockmsg);
}
else?if(strcmp(user_cmd“pwd“)==0)? //command?“pwd“
{
cmd_pwd(socksockmsg);
}
else?if(strcmp(user_cmd“dir“)==0)?? //command?“dir“
{
cmd_dir(socksockmsg);
}
else?if(strcmp(user_cmd“cd“)==0) //commad?“cd“
{
//input?command?argument
scanf(“%s“cmd_arg);
cmd_cd(socksockmsgcmd_arg);
}
else?if(strcmp(user_cmd“cd..“)==0)
{
cmd_cdback(socksockmsg);
}
else?if(strcmp(user_cmd“get“)==0) //command?“get“
{
//input?command?argument
scanf(“%s“cmd_arg);
cmd_get(socksockmsgcmd_arg);
}
else?if(strcmp(user_cmd“put“)==0) //command?“put“
{
//input?command?argument
scanf(“%s“cmd_arg);
cmd_put(socksockmsgcmd_arg);
}
else
{
printf(“bad?command!\n“);
}
??}??
}
//command?pwd
void?cmd_pwd(int?sockint?sockmsg)
{
//int?numRead;
char?dirName[30];
write(sockmsguser_cmdsizeof(user_cmd));
read(sockdirName30);
printf(“%s\n“dirName);
}
//command?dir
void?cmd_dir(i
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????9100??2010-12-01?16:57??ftp2\Server\server.c
?????文件???????5943??2003-10-15?13:04??ftp2\Client\client.c
?????目錄??????????0??2010-12-01?16:57??ftp2\Server
?????目錄??????????0??2010-11-30?22:29??ftp2\Client
?????目錄??????????0??2010-11-30?22:29??ftp2
-----------?---------??----------?-----??----
????????????????15043????????????????????5
- 上一篇:簡單計算器vs2010+MFC編寫
- 下一篇:VC生成二維碼sample
評論
共有 條評論