65.9K
CodeProject 正在变化。 阅读更多。
Home

CAsyncProxySocket - 派生自 CAsyncSocket 的类,用于通过代理连接

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (11投票s)

2001年12月9日

2分钟阅读

viewsIcon

294957

downloadIcon

7689

该类允许您通过 SOCKS4/5 和 HTTP 1.1 代理建立连接。

Sample Image - casyncproxysocket\casyncproxysocket_demo.gif

引言

此类是 CAsyncSocket 的派生类。 使用此类,您可以通过 SOCKS4/5 和 HTTP 1.1 代理进行连接。 此类充当您自己的类和 CAsyncSocket 之间的半透明层。 此类在 FileZilla 中使用,FileZilla 是一个功能强大的开源 FTP 客户端。 可以在这里找到它。 有关 SOCKS4/5 的更多信息,请访问这里。 有关 HTTP 1.1 的更多信息,请访问这里并搜索 RFC2616 和 RFC2617。

如何使用?

如果您正在使用 CAsyncSocket,则无需更改已有的代码即可使用 CAsyncProxySocket。 要使用它,您必须从 CAsyncProxySocket 而不是从 CAsyncSocket 派生您自己的类,并且您必须为 OnProxyOperationFailed(int nOpID)OnListenFinished(unsigned long &retProxyIp,int &retProxyPort) 提供定义。 创建派生类的实例时,应调用 SetProxy。 如果您在派生类中重载了 OnReceiveOnConnect 函数,则必须在 OnReceiveOnConnect 函数中首先调用 CAsyncProxySocket::OnReceiveCAsyncProxySocket::OnConnect 指令。

示例代码

CMyClass::OnReceive(int nErrorCode)
{
CAsyncProxySocket::OnReceive(nErrorCode);
//Add you own implementation below:
...
}

如果操作失败,则调用 OnProxyOperationFailed。 您可以在那里处理错误。 int nOpID 指定失败的操作类型:连接尝试失败时为 PROXYOP_CONNECT,创建侦听套接字失败时为 PROXYOP_LISTEN

如果要使用 CAsyncProxySocket 创建侦听套接字,则必须使用此重载函数:virtual BOOL Listen(unsigned long serverIp)serverIP 是您已通过 SOCKS 代理连接的服务器的 IP。 如果没有主连接,则不能通过 SOCKS 代理使用侦听套接字。 侦听套接字仅受 SOCKS 代理支持,这不适用于 HTTP 代理。 成功创建侦听套接字后,将调用 OnListenFinished。 参数 unsigned long &retProxyIpint &retProxyPort 将告诉您侦听套接字的 IP 和端口。 之后,您必须处理 OnAccept 消息并接受连接。

其他新函数及其参数的说明

void SetProxy(int nProxyType);
void SetProxy(int nProxyType, CString ProxyHost, int nProxyPort);
void SetProxy(int nProxyType, CString ProxyHost, int nProxyPort,CString 
ProxyUser, CString ProxyPass);

调用这些函数之一来设置代理类型。 参数

  • nProxyType 指定代理类型。
  • ProxyHostnProxyPort 指定代理的地址。
  • ProxyUserProxyPass 仅适用于 SOCKS5 代理。

支持的代理类型

  • PROXYTYPE_NOPROXY
  • PROXYTYPE_SOCKS4
  • PROXYTYPE_SOCKS4A
  • PROXYTYPE_SOCKS5
  • PROXYTYPE_HTTP11
GetProxyPeerName

GetProxyPeerName 类似于 CAsyncSocketGetPeerName,但返回通过代理连接的服务器的地址。 如果使用代理,GetPeerName 仅返回代理的地址。

int GetProxyType()

返回使用的代理类型。

const int GetLastProxyError() const;

返回上次代理错误。

历史

  • 2001年12月20日
    • 添加了基本的 HTTP 1.1 身份验证。
    • 修复了 SOCKS5 代码中的内存泄漏。
    • 套接字关闭后,将调用 OnSocksOperationFailed
    • 修复了一些小错误。
  • 2001年12月9日
    • 初始发布。
© . All rights reserved.