Error: 值不能为 null。 参数名: buffer.Array WebSocket connection closed
时间: 2024-10-22 18:06:34 浏览: 29
这个错误提示"Value cannot be null." 并提到参数 `buffer.Array`,通常意味着在尝试从WebSocket接收数据时,接收到的数据缓冲区 (`buffer`) 是空的,即 `null` 或未初始化。
当你在C#中使用 `client.ReceiveAsync()` 获取新的WebSocket消息时,`buffer` 需要预先分配存储数据的空间。如果服务器没有立即发送消息或者网络中断导致无法接收数据,`buffer` 就可能会变成 `null`,因此引发此错误。
解决这个问题,你应该检查在循环接收之前是否正确设置了 `buffer`。这里是一个修复后的版本:
```csharp
while (true)
{
byte[] tempBuffer = new byte[4096]; // 例如设置一个合理的缓冲大小
WebSocketReceiveResult result = await client.ReceiveAsync(new ArraySegment<byte>(tempBuffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close)
break;
if (result.Count > 0) // 检查接收到的数据是否为空
{
string serverResponse = Encoding.UTF8.GetString(tempBuffer, 0, result.Count);
Console.WriteLine($"Received from server: {serverResponse}");
}
else
{
Console.WriteLine("No data received.");
}
}
```
这里我们在每次循环时动态地创建一个新的 `tempBuffer` 作为临时接收缓冲区,并在成功接收数据后将其赋值给 `buffer`。这样可以避免因 `null` 引发的异常。
阅读全文