问题标签 [system.net.websockets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
244 浏览

c# - WebSocketClient ReceiveAsync 永远不会完成(单声道,Linux)

我在 Mono、Linux、ARM 上的 WebSockets 遇到问题(它是一个 Jetson Nano,以防万一)。

此示例连接到 WebSocket 服务器,然后等待返回的第一条文本消息,将其记录下来,仅此而已。该程序在 Windows 下可以正常运行。但是当我在 Nano(ARM Linux Ubuntu、Mono、Framework v4.6.1)上运行它时,它永远不会收到消息。它连接并发出 ReceiveAsync,但 ReceiveAsync 永远不会完成。

我的测试 WebSocket 服务器在连接后立即返回一条“hello”文本消息,并且服务器正常工作,因为其他客户端可以正确连接并接收 hello 消息。只是这个 C# Mono 构建不起作用。

它使用 wss(基于 HTTPS 的 WebSockets),并且服务器在开发过程中恰好是自签名证书,因此 ServerCertificateValidationCallback 返回 true 以允许它。

我通过运行 xbuild 构建了这个程序。

杰特森纳米;Linux 4.9.140-tegra aarch64;单声道 4.6.2;

0 投票
0 回答
131 浏览

c# - 只需使用带有证书的.Net System.Net.WebSockets 通过 WSS 客户端检查 WSS 服务器是否打开/关闭?

为什么总是出错找不到请求的对象?请参阅我的评论代码中的跟踪详细信息。

我需要实现 WSS 客户端并使用证书检查 WSS 服务器的可用性。

但是当尝试创建 的对象时X509Certificate2,出现错误:

找不到请求的对象

0 投票
1 回答
98 浏览

c# - System.Net.WebSockets 连接在服务器侦听之前打开

在读取服务器以从套接字读取之前,我在负载下接受连接并将其设置为 OPEN 的设置遇到问题。

示例(不是实际代码):

在调用 AcceptWebSocketAsync 后,我注意到在客户端和服务器上添加断点时,客户端会收到连接已“打开”并准备好使用并开始发送数据的信息。

问题是此时 ReceiveAsync 尚未启动,原因是 ReceiveAsync 开始运行任务的速度有点慢,由于相关服务器处于高位,它们在 WaitingForActivation 中停留的时间比在空闲系统上的时间长一点负载(许多其他任务/线程和少量cpu)。

这是正常行为吗?如何制止?

0 投票
1 回答
189 浏览

c# - System.Net.WebSockets 在断开连接后将套接字留在 close_wait

我在正确关闭 System.Net.WebSockets 连接时遇到问题。

经过一番谷歌搜索后,甚至发现有人解释了如何正确执行此操作,但他自己的示例将套接字留在 close_wait 中。

我会使用那个人的样本,因为他的解释很好,博文在这里:

https://mcguirev10.com/2019/08/17/how-to-close-websocket-correctly.html

github上的示例在这里:

https://github.com/MV10/WebSocketExample

要重现,请查看 git repo

使用 System.Net.WebSockets 构建客户端和服务器应用程序:

运行它们:

我在 linux 上运行它,所以要注意这样的套接字:

现在,在客户端上,按 ESC 并会出现一个 CLOSE_WAIT 套接字。
如果只有几个连接,这将不是问题,但是在谈论成百上千时,我们会遇到资源限制。

我知道 close_wait 意味着客户端连接已经发送它关闭(FIN),现在由服务器来清理/关闭套接字。

此示例中的连接未正确关闭/清理有什么问题?


编辑:

一些附加信息,尝试了我在 github 上找到的 System.Net.WebSockets 的实现,并且它似乎确实按预期工作:

https://github.com/ninjasource/Ninja.WebSockets

我宁愿使用.net核心中的那个,维护的代码更少

0 投票
1 回答
304 浏览

c# - 与 C# 客户端和 Node.js 服务器的 Websocket 关闭握手

我在 C# 客户端上使用“CloseOutputAsync”来启动与 Node.js 服务器的关闭握手。

我的 Node.js 服务器收到一个“关闭”事件并立即将他的“websocket.readyState”设置为“关闭”,而无需通过“关闭”。

当我的 C# 客户端发送关闭握手时,他将状态设置为“CloseSent”。

问题是我的 C# 保持在这种状态,而我的 Node.js 服务器认为 websocket 连接已关闭。

如何检测服务器上的连接是“CLOSING”,我可以使用 ws 库的什么功能向 C# 客户端发送确认以确保他的状态从“CloseSent”变为“Closed”?

我正在使用 Node.js 下的标准“ws”库和 C# 下的标准“System.Net.WebSockets”。