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






4.73/5 (11投票s)
2001年12月9日
2分钟阅读

294957

7689
该类允许您通过 SOCKS4/5 和 HTTP 1.1 代理建立连接。
引言
此类是 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
。 如果您在派生类中重载了 OnReceive
或 OnConnect
函数,则必须在 OnReceive
和 OnConnect
函数中首先调用 CAsyncProxySocket::OnReceive
和 CAsyncProxySocket::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 &retProxyIp
和 int &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
指定代理类型。ProxyHost
和nProxyPort
指定代理的地址。ProxyUser
和ProxyPass
仅适用于 SOCKS5 代理。
支持的代理类型
PROXYTYPE_NOPROXY
PROXYTYPE_SOCKS4
PROXYTYPE_SOCKS4A
PROXYTYPE_SOCKS5
PROXYTYPE_HTTP11
GetProxyPeerName
GetProxyPeerName
类似于 CAsyncSocket
的 GetPeerName
,但返回通过代理连接的服务器的地址。 如果使用代理,GetPeerName
仅返回代理的地址。
int GetProxyType()
返回使用的代理类型。
const int GetLastProxyError() const;
返回上次代理错误。
历史
- 2001年12月20日
- 添加了基本的 HTTP 1.1 身份验证。
- 修复了 SOCKS5 代码中的内存泄漏。
- 套接字关闭后,将调用
OnSocksOperationFailed
。 - 修复了一些小错误。
- 2001年12月9日
- 初始发布。