远程参与方在未完成握手的情况下关闭了websocket连接



我是WebSockets的新手,目前正在尝试为我正在进行的聊天实现一个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上运行,这似乎很好。发送消息也很好,每个人都会收到。问题是,如果你不理会它,一段时间不发送任何消息,它只会引发异常并引发错误。

我可能应该发布解决方案。我把这个代码放在一个单独的类中,以便我调用。然而,在窗体/窗口中使用此代码可以使其工作,不确定原因。

最新更新