程序目的是透过SOCKS5代理服务器下载远程FTP上的文件。
使用以下代码链接SOCKS5代理,去下载FTP文件,当SOCKS5代理服务器不设密码时,理服务器收到SOCKS4的请求,并且能下载成功,但是当代理服务器设置密码,并用InternetSetOption()设置登录的用户名和密码,就不能设置成功,请高手看看呀,这是为什么?
HINTERNET hOpenHandle;
char strUsername[256], strPassword[256];
DWORD cchUserLength, cchPasswordLength;
char tmp[128];
strcpy(tmp,"SOCKS=");
strcat(tmp,this->m_ProxyHost);
strcat(tmp,":");
char szport[8];
itoa(this->m_nProxyPort,szport,10);
strcat(tmp,szport); hOpenHandle = InternetOpen("Example", 
INTERNET_OPEN_TYPE_PROXY, 
/*FProxyServer*/tmp, NULL, 0); strcpy(strUsername,this->m_ProxyUser);
cchUserLength = strlen(this->m_ProxyUser);
strcpy(strPassword,this->m_ProxyPass);
cchPasswordLength = strlen(this->m_ProxyPass);
BOOL sesult;
if (cchUserLength >0)
{
sesult = InternetSetOption(hOpenHandle, 
INTERNET_OPTION_PROXY_USERNAME, 
strUsername, 
cchUserLength+1);
if (sesult !=TRUE )
{
int dd = GetLastError();
//FormatMessage ();
}
}
if (cchPasswordLength>0)
{
sesult = InternetSetOption(hOpenHandle, 
INTERNET_OPTION_PROXY_PASSWORD, 
strPassword, 
cchPasswordLength+1);
if (!sesult)
{
int dwErrorCode = GetLastError();
}
}

HINTERNET hConnectHandle = InternetConnect(hOpenHandle, 
ipAddr,port,username,password,
INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);

int ret = FtpGetFile(hConnectHandle,reqFileNames,localFilePath,
0,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY |
INTERNET_FLAG_NO_CACHE_WRITE,0);

解决方案 »

  1.   

    windows的api是不支持socks5代理,前些日子专门为这个事情查过资料,一个自称是WinInet的项目经理的人在06年底左右说的
    你可以看看这个帖子
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=929937&SiteID=1
      

  2.   

    谢谢楼上的兄弟,这个问题搞了我近两天,我也已经
     I've mostly tried 了。
    原来windows的api本来就不支持。
    该死的微软。
      

  3.   

    太对了 我现在要用socks5去测试外网 结果不成功 ,不知道winsock可不可以??反正winInet不行