2014-04-11 59 views
5

我正在使用C#和WebSocket4Net庫構建安全的WebSockets客戶端。我希望我的所有連接都可以通過標準代理進行代理。如何在WebSocket4Net庫中使用代理服務器

這個庫使用SuperSocket.ClientEngine.Common.IProxyConnector來指定一個websocket連接的代理,但我不知道我應該如何實現它。

有沒有人與這個圖書館合作,並可以提供一些建議?

回答

12

我必須這樣做,通過Fiddler推送所有websocket連接,以便於調試。由於WebSocket4Net作者選擇重新使用他的IProxyConnector界面,因此不能直接使用System.Net.WebProxy

this link筆者建議使用其父母庫SuperSocket.ClientEngine的實現,您可以從CodePlex上下載並同時包括SuperSocket.ClientEngine.Common.dllSuperSocket.ClientEngine.Proxy.dll我不推薦這個。這會導致編譯問題,因爲他(很差)選擇使用相同的命名空間與ClientEngineWebSocket4Net與在這兩個DLL中定義的IProxyConnector。


什麼工作對我來說:

爲了得到它通過提琴手工作進行調試,我複製這兩個類爲我的解決方案,並將其改爲本地命名空間:

HttpConnectProxy似乎對以下行錯誤:

if (e.UserToken is DnsEndPoint)

變化:

if (e.UserToken is DnsEndPoint || targetEndPoint is DnsEndPoint)


在那之後,事情的罰款。示例代碼:

private WebSocket _socket; 

public Initialize() 
{ 
    // initialize the client connection 
    _socket = new WebSocket("ws://echo.websocket.org", origin: "http://example.com"); 

    // go through proxy for testing 
    var proxy = new HttpConnectProxy(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888)); 
    _socket.Proxy = (SuperSocket.ClientEngine.IProxyConnector)proxy; 

    // hook in all the event handling 
    _socket.Opened += new EventHandler(OnSocketOpened); 
    //_socket.Error += new EventHandler<ErrorEventArgs>(OnSocketError); 
    //_socket.Closed += new EventHandler(OnSocketClosed); 
    //_socket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(OnSocketMessageReceived); 

    // open the connection if the url is defined 
    if (!String.IsNullOrWhiteSpace(url)) 
     _socket.Open(); 
} 

private void OnSocketOpened(object sender, EventArgs e) 
{ 
    // send the message 
    _socket.Send("Hello World!"); 
} 
+0

這真的爲我節省了一些時間 - 謝謝! – fcrick

+2

有沒有辦法使用此解決方案與代理進行身份驗證? –

+0

在這裏獲得很多例外,一個接一個的關於代理,第一太多的數據,然後不兼容的協議,然後代理拒絕連接(又沒有返回狀態代碼2xx)...請更新答案? – Gizmo

相關問題