我正在使用 C# 和 WebSocket4Net 库构建一个安全的 WebSockets 客户端。我希望我的所有连接都通过标准代理进行代理。
这个库使用SuperSocket.ClientEngine.Common.IProxyConnector
来指定 websocket 连接的代理,但我不确定我应该如何实现它。
有没有人使用过这个库并可以提供一些建议?
我正在使用 C# 和 WebSocket4Net 库构建一个安全的 WebSockets 客户端。我希望我的所有连接都通过标准代理进行代理。
这个库使用SuperSocket.ClientEngine.Common.IProxyConnector
来指定 websocket 连接的代理,但我不确定我应该如何实现它。
有没有人使用过这个库并可以提供一些建议?
我必须这样做,通过 Fiddler 推送所有 websocket 连接,以便于调试。因为WebSocket4Net作者选择重用他的IProxyConnector
接口,System.Net.WebProxy
是不能直接使用的。
在此链接上,作者建议使用他的父库SuperSocket.ClientEngine
中的实现,您可以从 CodePlex 下载并包含SuperSocket.ClientEngine.Common.dll
和SuperSocket.ClientEngine.Proxy.dll
. 我不推荐这个。这会导致编译问题,因为他(很糟糕)选择使用相同的命名空间ClientEngine
以及WebSocket4Net
在两个 dll 中定义的 IProxyConnector。
什么对我有用:
为了让它通过 Fiddler 进行调试,我将这两个类复制到我的解决方案中,并将它们更改为本地命名空间:
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!");
}