资源简介

使用c语言简单的实现了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


评论

共有 条评论