首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在WebSocket4Net库中使用代理

如何在WebSocket4Net库中使用代理
EN

Stack Overflow用户
提问于 2014-04-11 23:20:08
回答 1查看 6.8K关注 0票数 11

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-01 21:38:37

为了方便调试,我不得不做同样的事情,通过Fiddler来推动所有的websocket连接。因为WebSocket4Net作者选择重用他的IProxyConnector接口,所以System.Net.WebProxy不能直接使用.

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

什么对我有用:

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

HttpConnectProxy似乎在下面一行中有一个bug:

if (e.UserToken is DnsEndPoint)

改为:

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

在那之后,一切都很顺利。样本代码:

代码语言:javascript
复制
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!");
}
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23024121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档