client.TcpHandler = (address, port) =>
{
    var proxy = new Socks5ProxyClient(
        proxyHost, proxyPort, proxyUsername, proxyPassword);
    return System.Threading.Tasks.Task.FromResult(
        proxy.CreateConnection(address, port));
};
await client.LoginUserIfNeeded();

使用现有的 WTelegram.Client,并导入所选的兼容 SOCKS 库。proxyHost、端口和账号标识的是中间代理;lambda 的 address/port 则是 WTelegram 请求的目标。

CreateConnection 必须在代理协商完成后返回已连接的 TcpClient。仅仅连上代理端口,还不能完成这个交接。

示例使用库中的同步方法。把返回结果包装进 Task.FromResult 并不会让连接变成非阻塞;需要时应使用受支持的异步方法。

不仅登录时需要这个 handler,后续连接也要保留它。Telegram 账号认证与 SOCKS 账号仍是两回事。

相关文章