2009-05-04 216 views
2

VS 2008C#插座:通過代理服務器連接到服務器

我使用下面的代碼來檢測客戶端是否可以連接到我們的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

查看我的回答here,也許會有幫助。總體思路是首先建立到代理的連接,然後使用HTTP CONNECT命令打開到給定主機和端口的另一個TCP連接。

1

這是非常相似,這question。我不認爲有可能通過代理服務器創建套接字連接。您需要某種協議,而且通常需要管理員設置代理服務器來拒絕來自除標準HTTP,HTTPS以外的端口的連接。

一個解決方案是使用HTTP隧道。

1

代理的整個思想是在不改變應用的情況下改變網絡拓撲。因此,不需要更改應用程序,但在代理配置/設置中需要更改。

要獨立於應用程序檢查代理配置,可以使用Telnet Host Port並查看是否收到相同的超時/錯誤消息,或者輸入幾個字符後是否斷開連接。