远程方没有完成握手就关闭了websocket连接

时间:2021-01-05 17:24:36

标签: c# asp.net sockets web 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 上运行,这似乎没问题。发送消息也很好,每个人都会收到。问题在于,如果您不理会它并且暂时不发送任何消息,它只会引发异常并引发该错误。

0 个答案:

没有答案