如何在WebSocket4Net库中使用代理

本文关键字:代理 WebSocket4Net | 更新日期: 2023-09-27 17:58:02

我正在使用C#和WebSocket4Net库构建一个安全的WebSockets客户端。我希望通过标准代理来代理我的所有连接。

这个库使用SuperSocket.ClientEngine.Common.IProxyConnector来指定websocket连接的代理,但我不确定该如何实现。

有没有人在这个图书馆工作过,可以提供一些建议?

如何在WebSocket4Net库中使用代理

我也必须这样做,通过Fiddler推送所有的websocket连接,以便于调试。因为WebSocket4Net的作者选择重用他的IProxyConnector接口,所以System.Net.WebProxy不能直接使用。

在这个链接上,作者建议使用他的父库SuperSocket.ClientEngine中的实现,您可以从CodePlex下载该实现,并包括SuperSocket.ClientEngine.Common.dllSuperSocket.ClientEngine.Proxy.dll我不建议这样做这会导致编译问题,因为他(很糟糕)选择将相同的命名空间与ClientEngineWebSocket4Net一起使用,并且在这两个dll中都定义了IProxyConnector。


对我有效的方法:

为了让它通过Fiddler进行调试,我将这两个类复制到我的解决方案中,并将它们更改为本地命名空间:

  • HttpConnectProxy.cs
  • ProxyConnectionBase

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!");
}
相关文章: