首页 > 解决方案 > 远端没有完成握手就关闭了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 上运行,这似乎很好。发送消息也很好,每个人都会收到它。问题在于,如果您不理会它并且暂时不发送任何消息,它只会引发异常并引发该错误。

标签: c#asp.netsocketswebwebsocket

解决方案


我可能应该发布解决方案。我将这段代码放在一个单独的类中供我调用。但是,在表单/窗口中使用此代码使其工作,不确定原因。


推荐阅读