扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
#include <stdlib.h> //Required for atoi()
#include "..\winsock.h" //Winsock header file
#define PROG_NAME "Quick FTP Version 1"
#define HOST_NAME "NIC.DDN.MIL " // FTP server host
#define PASSWORD "PASS guest\r\n " // Password for FTP server host
#define WINSOCK_VERSION 0x0101 // Program requires Winsock version 1.1
#define DEFAULT_PROTOCOL 0 // No protocol specified, use default
#define NO_FLAGS 0 // No special flags specified
char szCommandBuffer[100]; // Buffer for FTP commands
LPSTR lpszFunctionName; // Pointer for function names
UINT GetReplyCode(LPSTR lpszServerReply)
{
UINT nCode; // Reply code as a number
char c; // Temporary storage
// lpszFunctionName = "GetReplyCode ";
c = *(lpszServerReply+3); // Save the character
*(lpszServerReply+3) = '\0'; // Terminate the code
nCode = atoi((const char *)lpszServerReply); // Convert code to number
*(lpszServerReply+3) = c; // Restore the character
return(nCode); // Return the reply code
}
UINT ReadFTPServerReply(SOCKET hControlChannel)
{
char sReceiveBuffer[1024]; // Data-storage buffer for FTP server reply
int iLength; // Length of data received from FTP server
lpszFunctionName = "ReadFTPServerReply ";
if ((iLength = recv(hControlChannel, (LPSTR)sReceiveBuffer,
sizeof(sReceiveBuffer), NO_FLAGS)) == SOCKET_ERROR)
{
int iWinsockErr = WSAGetLastError();
wsprintf(szCommandBuffer,"Error %d from the recv() function!! ",
iWinsockErr);
MessageBeep(MB_ICONHAND);
MessageBox(NULL, szCommandBuffer, lpszFunctionName,MB_OK |MB_ICONSTOP);
// Return 999 to indicate an error has occurred
return(999);
}
sReceiveBuffer[iLength] = '\0';
MessageBeep(MB_ICONASTERISK);
MessageBox(NULL, (LPSTR)sReceiveBuffer, lpszFunctionName,MB_OK |MB_ICONINFORMATION);
// Extract the reply code from the server reply and return as an integer
return(GetReplyCode(sReceiveBuffer));
}
UINT SendFTPCommand(SOCKET hControlChannel, LPSTR szCommandBuffer)
{
lpszFunctionName = "SendFTPCommand ";
// Send the FTP command
if ((send(hControlChannel, (LPSTR)szCommandBuffer,
lstrlen(szCommandBuffer), NO_FLAGS)) == SOCKET_ERROR)
{
int iWinsockErr = WSAGetLastError();
wsprintf(szCommandBuffer, "Error %d from the send() function!! ",
iWinsockErr);
MessageBeep(MB_ICONHAND);
MessageBox(NULL, szCommandBuffer, lpszFunctionName,MB_OK |MB_ICONSTOP);
// Return 999 to indicate an error has occurred
return(999);
}
// Read the server's reply and return the reply code as an integer
return(ReadFTPServerReply(hControlChannel));
}
UINT AnonymousFTPLogIn(SOCKET hControlSocket)
{
int nReplyCode; // FTP server reply code
int iMsg = 0; // Index subscript for FTP commands
lpszFunctionName = "AnonymousFTPLogIn ";
char *LoginCommand[]={"USER anonymous\r\n ",PASSWORD,NULL};
do
{
nReplyCode = SendFTPCommand(hControlSocket,(LPSTR)LoginCommand[iMsg++]);
}
while(LoginCommand[iMsg] &&nReplyCode <400);
return(nReplyCode);
}
SOCKET ConnectFTPControlSocket(LPSTR lpszHost)
{
LPHOSTENT lpHostEnt; // Internethost information structure
SOCKADDR_IN sockAddr; // Socket address structure
LPSERVENT lpServEnt; // Service information structure
short nProtocolPort; // Protocol port
int nConnect; // Socket connection results
SOCKET hControlSocket; // Control socket handle
lpszFunctionName = "ConnectFTPControlSocket ";
if (!(lpHostEnt = gethostbyname(lpszHost)))
{
int iWinsockErr = WSAGetLastError();
wsprintf(szCommandBuffer,"Error #%d while resolving address for %s ",
iWinsockErr, lpszHost);
MessageBeep(MB_ICONHAND);
MessageBox(NULL, szCommandBuffer, lpszFunctionName,MB_OK |MB_ICONSTOP);
return(INVALID_SOCKET);
}
if ((hControlSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP))
== INVALID_SOCKET)
{
int iWinsockErr = WSAGetLastError();
wsprintf(szCommandBuffer,"Error #%d occurred while creating socket!! ",
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者