WSADATA wsdata;
int nRet = WSAStartup(MAKEWORD(2,2), &wsdata);
if (0 != nRet)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
SOCKET socketTemp = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(21);
serverAddr.sin_addr.S_un.S_addr = inet_addr("192.168.102.153");
nRet = connect(socketTemp, (SOCKADDR *)&serverAddr, sizeof(serverAddr));
if (SOCKET_ERROR == nRet)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
settimeout(socketTemp, true, 10000);
char recvBuf[1024] = {0};
int recvByte = recv(socketTemp, recvBuf, 1024, 0);
if (SOCKET_ERROR == recvByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
char command[32] = {0};
strcpy(command,"USER ftpadmin\r\n");
int sendByte = send(socketTemp, command, strlen(command), 0);
if (SOCKET_ERROR == sendByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
memset(recvBuf, 0, 1024);
recvByte = recv(socketTemp, recvBuf, 1024, 0);
if (SOCKET_ERROR == recvByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
memset(command, 0, 32);
strcpy(command,"PASS ftpadmin123\r\n");
sendByte = send(socketTemp, command, strlen(command), 0);
if (SOCKET_ERROR == sendByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
memset(recvBuf, 0, 1024);
recvByte = recv(socketTemp, recvBuf, 1024, 0);
if (SOCKET_ERROR == recvByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
memset(command, 0, 32);
strcpy(command,"CWD /home/ftpadmin\r\n");
sendByte = send(socketTemp, command, strlen(command), 0);
if (SOCKET_ERROR == sendByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
memset(recvBuf, 0, 1024);
recvByte = recv(socketTemp, recvBuf, 1024, 0);
if (SOCKET_ERROR == recvByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
sendByte = send(socketTemp, "PASV\r\n", strlen("PASV\r\n"), 0);
if (SOCKET_ERROR == sendByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
memset(recvBuf, 0, 1024);
recvByte = recv(socketTemp, recvBuf, 1024, 0);
if (SOCKET_ERROR == recvByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
const char *plisten;
plisten = strchr(recvBuf,'(');
plisten++;
union
{
unsigned char b[4];
unsigned long ui;
}ip;
union
{
unsigned char b[2];
unsigned short up;
}port;
unsigned char ip_port[6];
sscanf(plisten,"%u,%u,%u,%u,%u,%u",&ip_port[0],&ip_port[1],&ip_port[2],&ip_port[3],&ip_port[4],&ip_port[5],&ip_port[6]);
ip.b[3] = ip_port[0];
ip.b[2] = ip_port[1];
ip.b[1] = ip_port[2];
ip.b[0] = ip_port[3];
port.b[1] = ip_port[4];
port.b[0] = ip_port[5];
SOCKET socketData = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == socketData)
{
DWORD dwErr = WSAGetLastError();
closesocket(socketData);
return false;
}
SOCKADDR_IN dataAddr;
dataAddr.sin_family = AF_INET;
dataAddr.sin_port = htons(port.up);
dataAddr.sin_addr.S_un.S_addr = htonl(ip.ui);
nRet = connect(socketData, (SOCKADDR*)&dataAddr, sizeof(dataAddr));
if (SOCKET_ERROR == nRet)
{
DWORD dwErr = WSAGetLastError();
closesocket(socketData);
return false;
}
memset(command, 0, 32);
sendByte = send(socketTemp, "STOR 1.txt\r\n", strlen("STOR 1.txt\r\n"), 0);
if (SOCKET_ERROR == sendByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
memset(recvBuf, 0, 1024);
recvByte = recv(socketTemp, recvBuf, 1024, 0);
if (SOCKET_ERROR == recvByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
if (recvBuf[0] != '2')
{
closesocket(socketData);
return false;
}
HANDLE hFile = CreateFile("D:\\1.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
DWORD dwErr = GetLastError();
return -1;
}
char szBuff[4096] = {0};
DWORD dwReadByte = 0;
do
{
memset(szBuff, 0, 4096);
BOOL bRet = ReadFile(hFile, szBuff, sizeof(szBuff), &dwReadByte, NULL);
if (!bRet)
{
DWORD dwErr = GetLastError();
break;
}
if (dwReadByte > 0)
{
int nRet = send(socketData, szBuff, dwReadByte, 0);
if (SOCKET_ERROR == nRet)
{
DWORD dwErr = WSAGetLastError();
break;
}
}
} while (dwReadByte > 0);
memset(szBuff, 0, 4096);
CloseHandle(hFile);
closesocket(socketData);
memset(recvBuf, 0, 1024);
recvByte = recv(socketTemp, recvBuf, 1024, 0);
if (SOCKET_ERROR == recvByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}
char sendBuff[8] = {0};
strcpy_s(sendBuff,"QUIT\r\n");
sendByte = send(socketTemp, "QUIT\r\n", strlen("QUIT\r\n"), 0);
if (SOCKET_ERROR == sendByte)
{
DWORD dwErr = WSAGetLastError();
return 0;
}