FTP客户端:FTP Client:win32 console appplication
2010-03-16 16:03
204 查看
#include
"stdafx.h"
#include
"iostream"
#include
<WinSock2.h>
#include
<IO.h>
using
namespace std;
#pragma
comment(lib,"ws2_32.lib")
int
main()
{
WORD wVersionRequested;
WSADATA wsaData;
int
err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if
( err != 0 )
{
return
-1;
}
if
( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return
-1;
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(
"127.0.0.1"
);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(21);
int
b;
b = connect(sockClient, (SOCKADDR*)&addrSrv,
sizeof
(SOCKADDR));
if
(b == SOCKET_ERROR)
{
cout<<
"fail"
<<endl;
}
char
recvBuf[100];
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
//send the user name
char
buffer[256];
memset(buffer,0,256);
strcpy(buffer,
"USER "
);
strcat(buffer,
"username"
);
strcat(buffer,
"/r/n"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
//send the password
memset(buffer,0,256);
strcpy(buffer,
"PASS "
);
strcat(buffer,
"password"
);
strcat(buffer,
"/r/n"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
//tell server the file should be downloaded
memset(buffer,0,256);
strcpy(buffer,
"SIZE "
);
strcat(buffer,
"OFFICE12.exe"
);
strcat(buffer,
"/r/n"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
memset(buffer,0,256);
sprintf(buffer,
"PASV/r/n"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
const char
* pdir;
pdir=strchr(recvBuf,
'('
);
pdir++;
printf(
"%s"
,pdir);
union
{
unsigned char
b[4];
unsigned __int32
ui;
}uip;
union
{
unsigned char
b[2];
unsigned __int16
hi;
}uport;
unsigned __int32
u32[6];
sscanf(pdir,
"%u,%u,%u,%u,%u,%u"
,&u32[0],&u32[1],&u32[2],&u32[3],&u32[4],&u32[5],&u32[6]);
uip.b[3] = (
unsigned char
)u32[0];
uip.b[2] = (
unsigned char
)u32[1];
uip.b[1] = (
unsigned char
)u32[2];
uip.b[0] = (
unsigned char
)u32[3];
uport.b[1] = (
unsigned char
)u32[4];
uport.b[0] = (
unsigned char
)u32[5];
// send the command to receive the file
memset(buffer,0,256);
sprintf(buffer,
"RETR %s/r/n","OFFICE12.exe"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
SOCKET sockFile = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in myaddr;
memset(&myaddr, 0,
sizeof
(sockaddr_in));
myaddr.sin_family = AF_INET;
myaddr.sin_addr.S_un.S_addr = htonl(uip.ui);
myaddr.sin_port = htons(uport.hi);
b = connect(sockFile, (LPSOCKADDR)&myaddr, (
int)sizeof
(sockaddr_in));
if
(b == SOCKET_ERROR)
{
cout<<
"fail"
<<endl;
}
char
buffer1[4*4096];
//16KB
int
iresult = 0;
memset(buffer1,0,4*4096);
int
index = 0;
FILE* file=fopen(
"D://OFFICE12.exe","wb"
);
while
(true
)
{
++index;
iresult = recv(sockFile, buffer1, 4*4096, 0);
if
(iresult == 0)
{
break
;
}
fwrite(buffer1,
sizeof(char
),iresult,file);
}
cout<<index<<endl;
closesocket(sockClient);
WSACleanup();
cin.get();
return
1;
}
"stdafx.h"
#include
"iostream"
#include
<WinSock2.h>
#include
<IO.h>
using
namespace std;
#pragma
comment(lib,"ws2_32.lib")
int
main()
{
WORD wVersionRequested;
WSADATA wsaData;
int
err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if
( err != 0 )
{
return
-1;
}
if
( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return
-1;
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(
"127.0.0.1"
);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(21);
int
b;
b = connect(sockClient, (SOCKADDR*)&addrSrv,
sizeof
(SOCKADDR));
if
(b == SOCKET_ERROR)
{
cout<<
"fail"
<<endl;
}
char
recvBuf[100];
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
//send the user name
char
buffer[256];
memset(buffer,0,256);
strcpy(buffer,
"USER "
);
strcat(buffer,
"username"
);
strcat(buffer,
"/r/n"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
//send the password
memset(buffer,0,256);
strcpy(buffer,
"PASS "
);
strcat(buffer,
"password"
);
strcat(buffer,
"/r/n"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
//tell server the file should be downloaded
memset(buffer,0,256);
strcpy(buffer,
"SIZE "
);
strcat(buffer,
"OFFICE12.exe"
);
strcat(buffer,
"/r/n"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
memset(buffer,0,256);
sprintf(buffer,
"PASV/r/n"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
const char
* pdir;
pdir=strchr(recvBuf,
'('
);
pdir++;
printf(
"%s"
,pdir);
union
{
unsigned char
b[4];
unsigned __int32
ui;
}uip;
union
{
unsigned char
b[2];
unsigned __int16
hi;
}uport;
unsigned __int32
u32[6];
sscanf(pdir,
"%u,%u,%u,%u,%u,%u"
,&u32[0],&u32[1],&u32[2],&u32[3],&u32[4],&u32[5],&u32[6]);
uip.b[3] = (
unsigned char
)u32[0];
uip.b[2] = (
unsigned char
)u32[1];
uip.b[1] = (
unsigned char
)u32[2];
uip.b[0] = (
unsigned char
)u32[3];
uport.b[1] = (
unsigned char
)u32[4];
uport.b[0] = (
unsigned char
)u32[5];
// send the command to receive the file
memset(buffer,0,256);
sprintf(buffer,
"RETR %s/r/n","OFFICE12.exe"
);
send(sockClient,buffer + 0, strlen(buffer), 0);
memset(recvBuf, 0, 100);
recv(sockClient,recvBuf,100,0);
cout<<recvBuf<<endl;
SOCKET sockFile = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in myaddr;
memset(&myaddr, 0,
sizeof
(sockaddr_in));
myaddr.sin_family = AF_INET;
myaddr.sin_addr.S_un.S_addr = htonl(uip.ui);
myaddr.sin_port = htons(uport.hi);
b = connect(sockFile, (LPSOCKADDR)&myaddr, (
int)sizeof
(sockaddr_in));
if
(b == SOCKET_ERROR)
{
cout<<
"fail"
<<endl;
}
char
buffer1[4*4096];
//16KB
int
iresult = 0;
memset(buffer1,0,4*4096);
int
index = 0;
FILE* file=fopen(
"D://OFFICE12.exe","wb"
);
while
(true
)
{
++index;
iresult = recv(sockFile, buffer1, 4*4096, 0);
if
(iresult == 0)
{
break
;
}
fwrite(buffer1,
sizeof(char
),iresult,file);
}
cout<<index<<endl;
closesocket(sockClient);
WSACleanup();
cin.get();
return
1;
}
相关文章推荐
- smbclient - 类似FTP操作方式的访问SMB/CIFS服务器资源的客户端
- FTP客户端(利用sun.net.ftp.FtpClient实现)
- Console APP&&WIN32 APP
- 【FileZilla FTP Client】文件与服务器操作客户端
- 用apache FTP client实现FTP客户端--支持断点续传和中文文件 .
- [No0000DB]C# FtpClientHelper Ftp客户端上传下载重命名 类封装
- System.Net.FtpClient FTP 协议的客户端开发包
- VS2010+OpenCV2.3.1创建win32 console App 来显示一副图像
- 简单的FTP客户端 sun.net.ftp.FtpClient
- FTP服务器和客户端源代码编写问题(ftp server client source)
- 基于windows win32 Console App的多线程小例子
- win32 Console App的多线程小例子
- LotusScript Class to do client or server side FTP on Win32 platform. FTP using script and wininet.dll.
- FTP客户端(利用sun.net.ftp.FtpClient实现)
- FTPClient调用retrieveFileStream导致线程挂起(防火墙问题);下载文件小于实际文件问题解决
- 使用Maven管理项目(1)--创建简单的Console App
- App客户端架构演化之路
- Oracle 11G Client 客户端安装步骤(图文详解)
- 解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。”(图)(转载)
- 关于cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题(不需要修改任何代码,只需要一个配置)