我想做一个 websocket 客户端来连接第三方 web socket 服务器。
我正在使用 ClientWebSocket 类:
public WSClientService(ClientWebSocket client, ILogger<WSClientService> logger)
{
_client = client;
_logger = logger;
}
对于接收消息,我使用此方法:
public async Task GetMessagesAsync()
{
while (_client.State == WebSocketState.Open)
{
var chunkSize = 1024 * 4;
var buffer = new ArraySegment<byte>(new byte[chunkSize]);
do
{
WebSocketReceiveResult result;
using var ms = new MemoryStream();
try
{
do
{
//here throws exception
result = await _client.ReceiveAsync(buffer, CancellationToken.None);
ms.Write(buffer.Array, buffer.Offset, result.Count);
} while (!result.EndOfMessage);
if (result.MessageType == WebSocketMessageType.Close)
{
break;
}
ms.Seek(0, SeekOrigin.Begin);
using var reader = new StreamReader(ms, Encoding.UTF8);
var message = await reader.ReadToEndAsync();
_logger.LogInformation(message);
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
}
} while (_client.State != WebSocketState.Aborted);
}
}
但是对于某些消息,我会收到此异常消息:
The WebSocket received a frame with one or more reserved bits set
我注意到这可能是由于某种压缩而发生的,因为我可以接收小消息。调用这个时抛出的异常result = await _client.ReceiveAsync(buffer, CancellationToken.None);
有谁知道如何解决这个问题?