VC如何实现使用代理访问的功能


在MFC框架下,怎么实现像QQ登录前设置使用代理的方式连接服务器,并且与服务器收发数据。

请各位大神指导下,谢谢!!

11 个解决方案

#1


直接把代理地址当作目标通讯地址发送数据就可以了。如果是http透明代理的话。

#2


引用 1 楼 caozhy 的回复:
直接把代理地址当作目标通讯地址发送数据就可以了。如果是http透明代理的话。


能说的仔细点嘛,目标地址要通过代理地址进行访问啊,能给段代码吗?

#3


引用 1 楼 caozhy 的回复:
直接把代理地址当作目标通讯地址发送数据就可以了。如果是http透明代理的话。




如果把代理地址当作通讯地址,那么我的服务器地址有如何访问呢?帮忙说仔细点嘛,最好给段代码啊

#4


引用 3 楼 wga512 的回复:
Quote: 引用 1 楼 caozhy 的回复:

直接把代理地址当作目标通讯地址发送数据就可以了。如果是http透明代理的话。




如果把代理地址当作通讯地址,那么我的服务器地址有如何访问呢?帮忙说仔细点嘛,最好给段代码啊


你的http请求具有host字段,表示目标主机,代理就能帮你转过去。不需要特殊的处理。

#5


本帖最后由 VisualEleven 于 2013-06-17 11:03:43 编辑
引用 4 楼 caozhy 的回复:
直接把代理地址当作目标通讯地址发送数据就可以了。如果是http透明代理的话。


如果把代理地址当作通讯地址,那么我的服务器地址有如何访问呢?帮忙说仔细点嘛,最好给段代码啊

你的http请求具有host字段,表示目标主机,代理就能帮你转过去。不需要特殊的处理。

    
    SOCKET sockSrv;
SOCKADDR_IN addrSrv; 
hostent *remote; 
remote=gethostbyname(sServerIP);
sockSrv = socket(AF_INET,SOCK_STREAM,0);// AF_INET ..tcp连接    
//初始化连接与端口号       
addrSrv.sin_family=AF_INET; // host byte order 
addrSrv.sin_addr = *((struct in_addr *)remote->h_addr);       
addrSrv.sin_port=htons(uPort);// 设置端口号
memset(addrSrv.sin_zero, 0, sizeof(addrSrv.sin_zero));

if(connect(sockSrv,(sockaddr*)&addrSrv,sizeof(sockaddr)) == -1)    //连接服务器
{
AfxMessageBox("连接网络失败!");
return;
}

        你说的我还是没明白,哪个host字段使代理自动就转过去了啊?
        上面的代码怎么添加呢?假如SOCKET类型的sockProxy怎么作为sockSrv的中转啊

#6


自己来顶一下

#7


自己来顶一下,来帮忙解决一下啊

#8


引用 5 楼 wga512 的回复:
Quote: 引用 4 楼 caozhy 的回复:

直接把代理地址当作目标通讯地址发送数据就可以了。如果是http透明代理的话。


如果把代理地址当作通讯地址,那么我的服务器地址有如何访问呢?帮忙说仔细点嘛,最好给段代码啊


你的http请求具有host字段,表示目标主机,代理就能帮你转过去。不需要特殊的处理。

        SOCKET sockSrv;
SOCKADDR_IN addrSrv; 
hostent *remote; 
remote=gethostbyname(sServerIP);
sockSrv = socket(AF_INET,SOCK_STREAM,0);// AF_INET ..tcp连接    
//初始化连接与端口号       
addrSrv.sin_family=AF_INET; // host byte order 
addrSrv.sin_addr = *((struct in_addr *)remote->h_addr);       
addrSrv.sin_port=htons(uPort);// 设置端口号
memset(addrSrv.sin_zero, 0, sizeof(addrSrv.sin_zero));

if(connect(sockSrv,(sockaddr*)&addrSrv,sizeof(sockaddr)) == -1)    //连接服务器
{
AfxMessageBox("连接网络失败!");
return;
}

        你说的我还是没明白,哪个host字段使代理自动就转过去了啊?
        上面的代码怎么添加呢?假如SOCKET类型的sockProxy怎么作为sockSrv的中转啊



大哥, HTTP才有代理一词, 单纯的用socket连接, 那么就必须让你的代理机也运行个程序开个端口让你的机连接过去, 然后用自定义的协议来访问外网的机器...代理本身就是HTTP协议的一种格式...

#9


  SOCKET sockSrv;
    SOCKADDR_IN addrSrv; 
    hostent *remote; 
    remote=gethostbyname(sServerIP);
    sockSrv = socket(AF_INET,SOCK_STREAM,0);// AF_INET ..tcp连接    
    //初始化连接与端口号       
    addrSrv.sin_family=AF_INET;        // host byte order 
    addrSrv.sin_addr = *((struct in_addr *)remote->h_addr);                 
    addrSrv.sin_port=htons(uPort);// 设置端口号
    memset(addrSrv.sin_zero, 0, sizeof(addrSrv.sin_zero));
 
    if(connect(sockSrv,(sockaddr*)&addrSrv,sizeof(sockaddr)) == -1)    //连接服务器
    {
        AfxMessageBox("连接网络失败!");
        return;
    }

#10


win32 和 mfc 已经提供了相应的方法何必自己直接用 socket
CInternetSession::SetOption
INTERNET_OPTION_PROXY 
38 
Sets or retrieves an INTERNET_PROXY_INFO structure that contains the proxy data for an existing InternetOpen handle when the HINTERNET handle is not NULL. If the HINTERNET handle is NULL, the function sets or queries the global proxy data. This option can be used on the handle returned by InternetOpen. It is used by InternetQueryOption and InternetSetOption.

Note  It is recommended that INTERNET_OPTION_PER_CONNECTION_OPTION be used instead of INTERNET_OPTION_PROXY. For more information, see OnlineKB article 226473.

INTERNET_OPTION_PROXY_PASSWORD 
44 
Sets or retrieves a string value that contains the password used to access the proxy. This is used by InternetQueryOption and InternetSetOption. This option can be set on the handle returned by InternetConnect or HttpOpenRequest.

INTERNET_OPTION_PROXY_SETTINGS_CHANGED 
95 
Alerts the current WinInet instance that proxy settings have changed and that they must update with the new settings. To alert all available WinInet instances, set the Buffer parameter of InternetSetOption to NULL and BufferLength to 0 when passing this option. This option can be set on the handle returned by InternetConnect or HttpOpenRequest.

INTERNET_OPTION_PROXY_USERNAME 
43 
Sets or retrieves a string value that contains the user name used to access the proxy. This is used by InternetQueryOption and InternetSetOption. This option can be set on the handle returned by InternetConnect or HttpOpenRequest.

#11


引用 10 楼 hdt 的回复:
win32 和 mfc 已经提供了相应的方法何必自己直接用 socket
CInternetSession::SetOption
INTERNET_OPTION_PROXY 
38 
Sets or retrieves an INTERNET_PROXY_INFO structure that contains the proxy data for an existing InternetOpen handle when the HINTERNET handle is not NULL. If the HINTERNET handle is NULL, the function sets or queries the global proxy data. This option can be used on the handle returned by InternetOpen. It is used by InternetQueryOption and InternetSetOption.

Note  It is recommended that INTERNET_OPTION_PER_CONNECTION_OPTION be used instead of INTERNET_OPTION_PROXY. For more information, see OnlineKB article 226473.

INTERNET_OPTION_PROXY_PASSWORD 
44 
Sets or retrieves a string value that contains the password used to access the proxy. This is used by InternetQueryOption and InternetSetOption. This option can be set on the handle returned by InternetConnect or HttpOpenRequest.

INTERNET_OPTION_PROXY_SETTINGS_CHANGED 
95 
Alerts the current WinInet instance that proxy settings have changed and that they must update with the new settings. To alert all available WinInet instances, set the Buffer parameter of InternetSetOption to NULL and BufferLength to 0 when passing this option. This option can be set on the handle returned by InternetConnect or HttpOpenRequest.

INTERNET_OPTION_PROXY_USERNAME 
43 
Sets or retrieves a string value that contains the user name used to access the proxy. This is used by InternetQueryOption and InternetSetOption. This option can be set on the handle returned by InternetConnect or HttpOpenRequest.

学习了!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号