c# - 远端没有完成握手就关闭了websocket连接
问题描述
我是 WebSockets 的新手,目前正在尝试为我正在进行的聊天实现一个。但是,每次我运行它时,我都会收到一条错误消息:“远程方在未完成关闭握手的情况下关闭了 WebSocket 连接。”。
这是我当前的代码:
public async Task Receive(ClientWebSocket socket)
{
try
{
var buffer = new ArraySegment<byte>(new byte[2048]);
do
{
WebSocketReceiveResult result;
MemoryStream ms = new MemoryStream();
do
{
result = await socket.ReceiveAsync(buffer, CancellationToken.None); //Errors here
ms.Write(buffer.Array, buffer.Offset, result.Count);
} while (!result.EndOfMessage);
if (result.MessageType == WebSocketMessageType.Close)
break;
ms.Seek(0, SeekOrigin.Begin);
var reader = new StreamReader(ms, Encoding.UTF8);
string text = await reader.ReadToEndAsync();
Console.WriteLine(text);
} while (true);
}
catch (Exception ex)
{
MessageBox.Show("Error - " + ex.ToString());
Application.Current.Shutdown();
}
}
它错误result = await socket.ReceiveAsync(buffer, CancellationToken.None);
如果您确实继续发送消息,则不会出错。但是,如果您将其搁置一会儿,大约 30 秒或一分钟,它最终会显示该错误。服务器正在 VPS 上运行,这似乎很好。发送消息也很好,每个人都会收到它。问题在于,如果您不理会它并且暂时不发送任何消息,它只会引发异常并引发该错误。
解决方案
我可能应该发布解决方案。我将这段代码放在一个单独的类中供我调用。但是,在表单/窗口中使用此代码使其工作,不确定原因。
推荐阅读
- python - 将php文件中的数据加载到python中
- kubernetes - fluent bit kubernetes注解不起作用
- angular - Angular - 如何从其他组件直接挂钩到组件的加载实例
- angular - 错误 NG8001:'ngx-masonry' 不是已知元素
- vue.js - 如果 value=null,Vue3js Cutom 输入组件消失
- reactjs - @react-google-maps/api 使用 window.google.maps 导致类型错误 - 如何正确调用谷歌地图 API?
- r - 它有一个 Plot Legend 命令来绘制星图吗?
- django - 在 django 中为同一个视图使用两个 url?
- linux - 使用 ssl 证书在 ubuntu 中的 apache 上发布时,无法从 .NET Core Web 应用程序访问 js/css 库
- typescript - 打字稿:从联合类型中排除未定义