📄 ftp.c
字号:
#include "config.h"
Communi_Stru FtpCtrl; //IP,端口号
FTPCMDINFO FtpCmdInfo; //用户名,密码,文件路径及文件名
FTPCMD FtpCmd[] = //FTP命令字及其内容
{
{"USER ",FtpCmdInfo.Ftp_UserName},
{"PASS ",FtpCmdInfo.Ftp_UserPWD},
{"TYPE ","I"},
{"PASV "," "},
{"RETR ",FtpCmdInfo.DirFile_Name},
{"REST ",FtpCmdInfo.DirFile_Len},
};
uint8 GetFtpPort(INT8U *revbuf)
{
INT8U i = 0,j = 0,k = 0;
INT8U hport,lport;
INT8U *portptr = revbuf;
char hpbuf[10];
char lpbuf[10];
if(strstr((char *)portptr,"227"))
{
while(1)
{
if(*portptr++ == ',')
{
i++;
if(i == 4)break;
}
}
while(*portptr != ',')
{
hpbuf[j++] = *portptr++;
}
hpbuf[j] = '\0';
hport = atoi(hpbuf);
portptr++;
while(*portptr != ')'){
lpbuf[k++] = *portptr++;
}
lpbuf[k] = '\0';
lport = atoi(lpbuf);
sprintf(FtpCtrl.strPort,"%d", ((INT16U)hport<<8)|(INT16U)lport);
return TRUE;
}
return FALSE ;
}
/*****************************************************************
Function name: FtpSendCmd
Descriptions: connecting FTP command with para
parameters: Buffer: point to buf including com and para
len: length of command
Returned value: None
******************************************************************/
uint8 FtpSendCmd(uint8 * ftpCmdbuf,FTPCMD ftpCmd,uint16 * cmdlen)
{
char buff[TRANSINFOLEN];
uint16 i=0;
memset(buff,0,sizeof(buff));
memcpy(ftpCmdbuf,ftpCmd.CmdName,strlen(ftpCmd.CmdName));
*cmdlen =strlen(ftpCmd.CmdName);
memcpy(ftpCmdbuf+*cmdlen,ftpCmd.CmdPara,strlen(ftpCmd.CmdPara));
*cmdlen +=strlen(ftpCmd.CmdPara);
memcpy(ftpCmdbuf+*cmdlen,"\r\n",strlen("\r\n"));
*cmdlen +=strlen("\r\n");
for(i=0;i<strlen((char *)ftpCmdbuf);i++)
sprintf(buff+strlen(buff),"%02X",ftpCmdbuf[i]);
*cmdlen=strlen(buff);
memcpy(ftpCmdbuf,buff,*cmdlen);
return TRUE;
}
uint8 Ftp_Conn (uint8 * uiReviceBuf0,uint16 * uiNum)
{
INT8U tempbuff[TRANSINFOLEN/2];
memset(uiReviceBuf0,0,TRANSINFOLEN);
FtpSendCmd(uiReviceBuf0,FtpCmd[0],uiNum);
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
OSTimeDlyHMSM(0,0,2,500);
memset(uiReviceBuf0,0,TRANSINFOLEN);
if(LoadUart2(UART2, uiReviceBuf0, uiNum))
{
memset(tempbuff,0,sizeof(tempbuff));
*uiNum=getHexStr(tempbuff,uiReviceBuf0,*uiNum);
memset(uiReviceBuf0,0,TRANSINFOLEN);
memcpy(uiReviceBuf0,tempbuff,*uiNum);
uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
}
memset(uiReviceBuf0,0,TRANSINFOLEN);
FtpSendCmd(uiReviceBuf0,FtpCmd[1],uiNum);
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
OSTimeDlyHMSM(0,0,2,0);
memset(uiReviceBuf0,0,TRANSINFOLEN);
if(LoadUart2(UART2, uiReviceBuf0, uiNum))
{
memset(tempbuff,0,sizeof(tempbuff));
*uiNum=getHexStr(tempbuff,uiReviceBuf0,*uiNum);
memset(uiReviceBuf0,0,TRANSINFOLEN);
memcpy(uiReviceBuf0,tempbuff,*uiNum);
uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
}
memset(uiReviceBuf0,0,TRANSINFOLEN);
FtpSendCmd(uiReviceBuf0,FtpCmd[2],uiNum);
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
OSTimeDlyHMSM(0,0,5,0);
memset(uiReviceBuf0,0,TRANSINFOLEN);
if(LoadUart2(UART2, uiReviceBuf0, uiNum))
{
memset(tempbuff,0,sizeof(tempbuff));
*uiNum=getHexStr(tempbuff,uiReviceBuf0,*uiNum);
memset(uiReviceBuf0,0,TRANSINFOLEN);
memcpy(uiReviceBuf0,tempbuff,*uiNum);
uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
}
memset(uiReviceBuf0,0,TRANSINFOLEN);
FtpSendCmd(uiReviceBuf0,FtpCmd[3],uiNum);
Send_data(uiReviceBuf0,TRANSINFOLEN,uiNum);
uartWrite(UART2,uiReviceBuf0,*uiNum,NULL);
uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
OSTimeDlyHMSM(0,0,5,0);
memset(uiReviceBuf0,0,TRANSINFOLEN);
if(LoadUart2(UART2, uiReviceBuf0, uiNum))
{
memset(tempbuff,0,sizeof(tempbuff));
*uiNum=getHexStr(tempbuff,uiReviceBuf0,*uiNum);
memset(uiReviceBuf0,0,TRANSINFOLEN);
memcpy(uiReviceBuf0,tempbuff,*uiNum);
uartWrite(UART3,uiReviceBuf0,*uiNum,NULL); //测试
GetFtpPort(uiReviceBuf0);
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -