【问题标题】:C# Socket: connect to server through proxy serverC# Socket:通过代理服务器连接到服务器
【发布时间】:2015-10-03 10:45:58
【问题描述】:

VS 2008

我正在使用下面的代码来检测客户端是否可以连接到我们的 SIP 服务器。这工作正常。但是,客户端已经改变了网络,现在我的应用程序必须从代理服务器后面连接到 SIP 服务器。

我得到的错误是:

“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应xxx.xxx.xx.xx:xx”

这段代码工作正常,直到我必须从代​​理服务器后面连接。

我看不到任何属性,我可以将代理地址添加到套接字。

我错过了什么吗?

非常感谢您的任何建议,

public bool IsSIPServerAvailable()
{
    bool isAvailable = true;
    Socket sock = new Socket(AddressFamily.InterNetwork,
                             SocketType.Stream,
                             ProtocolType.Tcp);

    try
    {
        sock.Connect("xxx.xxx.xx.xx", xx);
    }
    catch (SocketException ex)
    {
        Console.WriteLine(ex.Message);
        isAvailable = false;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        isAvailable = false;
    }
    finally
    {
        if (sock.Connected)
        {
            sock.Close();
        }
    }

    return isAvailable;
}

【问题讨论】:

    标签: c# networking proxy sockets


    【解决方案1】:

    看我的回答here,也许会有帮助。总体思路是先建立到代理的连接,然后使用 HTTP CONNECT 命令打开另一个到给定主机和端口的 TCP 连接。

    【讨论】:

      【解决方案2】:

      这与question 非常相似。我认为不可能通过代理服务器创建套接字连接。你需要某种协议,通常管理员会设置代理服务器来拒绝来自标准 HTTP、HTTPS 以外的端口的连接。

      一种解决方案是使用 HTTP 上的隧道。

      【讨论】:

        【解决方案3】:

        代理的整个想法是在不更改应用程序的情况下更改网络拓扑。因此无需更改应用程序,但需要更改代理配置/设置。

        要独立于您的应用程序检查代理配置,您可以使用Telnet Host Port 并查看您是否收到相同的超时/错误消息,或者您是否在输入几个字符后断开连接。

        【讨论】: