我试图将用C#编写的服务器中的一些数据发送到用JS编写的浏览器客户端。当我发送12900字节大小的消息时,一切正常。如果我发送大小为67990字节的消息,那么在服务器端我将得到没有错误,客户端我将断开连接错误1006,没有其他解释。我无法找到与邮件大小相关的任何限制。这是我试图发送数据的C#代码。
byte[] data =getDecodedMessage(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dataResponse)));
stream.Write(data, 0, data.Length);
答案 0 :(得分:0)
基于question user3892585 answer我在编码函数中将bytesRaw.Length
替换为bytesRaw.LongLength
以进行WebSocket数据传输。这样做之后,我没有收到套接字错误。
public static byte[] getEncodedMessage(byte[] bytesRaw)
{
List<byte> bytesFormatted = new List<byte>();
bytesFormatted.Add(129);
int indexStartRawData = -1; // it doesn't matter what value is
// set here - it will be set now:
if (bytesRaw.LongLength <= 125)
{
bytesFormatted.Add(Convert.ToByte(bytesRaw.LongLength));
indexStartRawData = 2;
}
else if (bytesRaw.LongLength >= 126 && bytesRaw.LongLength <= 65535)
{
bytesFormatted.Add(126);
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 8) & 255));
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength) & 255));
indexStartRawData = 4;
}
else
{
bytesFormatted.Add(127);
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 56) & 255));
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 48) & 255));
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 40) & 255));
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 32) & 255));
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 24) & 255));
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 16) & 255));
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 8) & 255));
bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength) & 255));
indexStartRawData = 10;
}
// put raw data at the correct index
bytesFormatted.InsertRange(indexStartRawData, bytesRaw);
return bytesFormatted.ToArray();
}