使用 .Net ClientWebSocket 从 WebSocket 获取数据

Posted

技术标签:

【中文标题】使用 .Net ClientWebSocket 从 WebSocket 获取数据【英文标题】:Get Data from WebSocket using .Net ClientWebSocket 【发布时间】:2016-12-28 07:53:25 【问题描述】:

我需要从 WebSocket 收集数据。

如果我尝试使用此站点测试 websocket:http://www.websocket.org/echo.html 我可以毫无问题地连接和发送消息,但是当我尝试使用 .Net Framework 库连接到 websocket 时,我得到:

System.Net.WebException:内部服务器错误 (500)。

我用来连接的代码是这样的:

        string uri = "wss://wss.xxx.xxx";
        ClientWebSocket webSocket = null;
        try
        
            webSocket = new ClientWebSocket();
            await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
            await Task.WhenAll(Receive(webSocket), Send(webSocket));
        
        catch (Exception ex)
        
            Console.WriteLine("Exception: 0", ex);
        

如果我尝试连接到任何其他网络套接字,代码运行良好...

与其他websocket的不同之处在于地址以“wss”而不是“ws”开头(认为是因为安全连接)。

如果我使用 Chrome 之类的浏览器进行测试,websocket 连接可以工作,但不能在 .Net 中,我是否必须添加一些标头才能模拟浏览器代理?

感谢支持

【问题讨论】:

我已经用 ws://echo.websocket.org 尝试了你的代码,它工作正常。 嗨 Memmet,是的,它适用于 ws://echo.websocket.org 但不适用于我必须使用的 websocket。 嗨 Memmet,是的,它适用于 ws://echo.websocket.org,但不适用于我必须使用的 websocket。如果你检查我的答案,现在我可以连接了,我只需要添加一些标题,握手就可以了...... 【参考方案1】:

最后经过一番搜索,我发现了问题:我只需要向 ClientWebSocket 添加标头。

问题是 ClientWebSocket 没有提供添加特定头的方法,我不得不发力 ClientWebSocket。

这个帖子帮我解决了很多问题:

Setting "User-Agent" HTTP header in ClientWebSocket

使用这个新版本的 ClientWebSocket 我能够添加标头。

【讨论】:

以上是关于使用 .Net ClientWebSocket 从 WebSocket 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 ClientWebSocket .net 核心测试 TestHost.WebSocketClient

使用 LXD REST API,ClientWebSocket 在 .Net Core 上抛出“AuthenticationException”,但在 .Net Framework 上,它运行良好

System.Net.WebSockets 乒乓球

.Net Core ClientWebSocket:无法连接到服务器

使用 ClientWebSocket 实现与 Websocket 服务器的安全 (SSL) 连接

Xamarin Mono ClientWebSocket 实现不适用于安全套接字