資源簡介
我自己的畢業(yè)設計作品,比較初級的東西,但是實現(xiàn)了上下傳文件,目錄管理相關(guān)的一些操作.僅供新手參考.實現(xiàn)的命令有USER PASS QUIT PASV TYPE PWD CWD LIST RETR STOR

代碼片段和文件信息
#include?
#include?
#include?
#include??
#include?
#include?
#include??
#include?
#include?
#include?
#include?
#define?FTP_DEFAULT_PORT?21
#define?SUCCESS?0
#define?MAX_STR_LEN?64
#define?MAX_BUF_LEN?4096
#define?MAX_FILE_NAME?255
/*?Global?Variables?*/
struct?sockaddr_in?Ftp_Server_ctrl_addr;???/*server‘s?address?for?ctrl?connection*/
struct?sockaddr_in?Ftp_Server_data_addr;???/*server‘s?address?for?data?connection*/
int?sockfd_ctrl;???????????/*?socket?for?control?connection?*/
int?sockfd_data;???????????/*?socket?for?data?connection?*/
char?ServerIP[MAX_STR_LEN];??????/*?Server‘s?ip?*/
?
int?ServerPort;??????/*?Server‘s?port?*/
??
char?User[MAX_STR_LEN];???????/*?user‘s??account?for?logining*/
char?Password[MAX_STR_LEN];???/*?user‘s?password?for?logining*/
char?MsgBuffer[MAX_BUF_LEN];
char?DataBuffer[MAX_BUF_LEN];
static?struct?termios?stored_settings;
/*?print?error?imformation?and?exit?program?*/
int?ErrorExit(const?char*?error)
{
??printf(“Error:?%s\n“error);
??exit(-1);
}
/*?
void?echo_off(void)
{
struct?termios?new_settings;
?? tcgetattr(0&stored_settings);
????new_settings?=?stored_settings;
new_settings.c_lflag?&=?(~ECHO);
tcsetattr(0TCSANOW&new_settings);
return;
}
void?echo_on(void)
{
tcsetattr(0TCSANOW&stored_settings);
return;
}
*/
/*********************************************send?and?receive?message************************************************/
/*?????send?control?command?to?server?with?specified?socket?descriptor?
?*?????COMMAND???or???COMMAND??
?*?????example:?“USER?anonymous\r\n“??or???“PWD\r\n“
?*/????
int?SendControlCommand(const?char*?cmd_code?const?char*?cmd_para)//?test?ok??by?myself
{
char?SendBuffer[MAX_BUF_LEN];
int?Length;
int?SendRes;
memset(SendBuffer?0?MAX_BUF_LEN);
if(cmd_code)
{
strcpy(SendBuffercmd_code);
if(cmd_para)
{
??????strcat(SendBuffer“?“);
strcat(SendBuffercmd_para);
strcat(SendBuffer“\r\n“);
}
else
strcat(SendBuffer“\r\n“);
Length=strlen(SendBuffer);
SendRes?=?write(sockfd_ctrlSendBufferLength);
}
return?SendRes;
}
/*?get?reply?message?from?server?*/?????????????????//test?ok
int?GetReplyMsg(void)
{
??int?count;
??int?reply;
??memset(MsgBuffer?0?MAX_BUF_LEN);
??count?=?read(sockfd_ctrlMsgBufferMAX_BUF_LEN);
??reply?=?atoi(MsgBuffer);
??printf(“[Server?reply]????%s“?MsgBuffer);
??return?reply;
}
/***************************************?login************************************/
/*?get?user‘s?account?from?stdin?*/
void?GetUserAccount(void)???????????????????????//test?ok
{
??char?buf[MAX_BUF_LEN];
??printf(“User:(Press?Enter?for?anonymous):“);
fgets(bufsizeof(buf)stdin);
if(buf[0]==‘\n‘)
strncpy(User“anonymous“9);
else
strncpy(Userbufstrlen(buf)-1);
// printf(“User:%s\n“User);
}
/*?get?user‘s?password?from?stdin*/
void?GetUserPasswd(void)???????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????17499??2011-05-19?19:01??client
?????文件???????13655??2011-05-19?23:14??client.c
- 上一篇:樹莓派小車循跡程序
- 下一篇:運動會分數(shù)統(tǒng)計程序設計報告
評論
共有 條評論