问题标签 [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.
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;
c# - 只需使用带有证书的.Net System.Net.WebSockets 通过 WSS 客户端检查 WSS 服务器是否打开/关闭?
为什么总是出错找不到请求的对象?请参阅我的评论代码中的跟踪详细信息。
我需要实现 WSS 客户端并使用证书检查 WSS 服务器的可用性。
但是当尝试创建 的对象时X509Certificate2
,出现错误:
找不到请求的对象
c# - System.Net.WebSockets 连接在服务器侦听之前打开
在读取服务器以从套接字读取之前,我在负载下接受连接并将其设置为 OPEN 的设置遇到问题。
示例(不是实际代码):
在调用 AcceptWebSocketAsync 后,我注意到在客户端和服务器上添加断点时,客户端会收到连接已“打开”并准备好使用并开始发送数据的信息。
问题是此时 ReceiveAsync 尚未启动,原因是 ReceiveAsync 开始运行任务的速度有点慢,由于相关服务器处于高位,它们在 WaitingForActivation 中停留的时间比在空闲系统上的时间长一点负载(许多其他任务/线程和少量cpu)。
这是正常行为吗?如何制止?
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核心中的那个,维护的代码更少
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”。