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