C#套接字:通过代理服务器连接到服务器

时间:2009-05-04 05:54:51

标签: c# networking proxy sockets

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;
}

3 个答案:

答案 0 :(得分:3)

请参阅我的回答here,也许会有所帮助。一般的想法是首先建立与代理的连接,然后使用HTTP CONNECT命令打开到给定主机和端口的另一个TCP连接。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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