добрый день.
Я пытаюсь отправить поток через сокет (разработанный в C #) на веб-сокет в javascript, отправленный хорошо с меньшим количеством данных. Я получаю сообщение об ошибке, что я не знаю, что является следующим:
"Невозможно записать данные в транспортное соединение: сброс соединения по одноранговому узлу."
код
JObject obj = JObject.Parse(VarTransform.reciveMASKXOR(bytes));
string docs = SearhLucene((int)obj.SelectToken("point"),Obj.SelectToken("data").ToString()); bytes = VarTransform.sendMaskXOR(docs);
//ERROR############
stream.Write(bytes, 0, bytes.Length);
//#################
XOR кодирование
byte[] bytes = Encoding.UTF8.GetBytes(text);
List<byte> Lbytes = new List<byte>();
Lbytes.Add((byte)129);
Lbytes.Add((byte)129);
int Length = bytes.Length + 1;
if (Length <= 125)
{
Lbytes.Add((byte)(Length));
Lbytes.Add((byte)(Lbytes.Count));
}
else
{
if (Length >= 125 && Length <= 65535)
{
Lbytes.Add((byte)126);
Lbytes.Add((byte)(Length >> 8));
Lbytes.Add((byte)Length);
Lbytes.Add((byte)Lbytes.Count);
}
else
{
Lbytes.Add((byte)127);
Lbytes.Add((byte)(Length >> 56));
Lbytes.Add((byte)(Length >> 48));
Lbytes.Add((byte)(Length >> 40));
Lbytes.Add((byte)(Length >> 32));
Lbytes.Add((byte)(Length >> 24));
Lbytes.Add((byte)(Length >> 16));
Lbytes.Add((byte)(Length >> 8));
Lbytes.Add((byte)Length);
Lbytes.Add((byte)Lbytes.Count);
}
}
Lbytes.RemoveAt(0);
Lbytes.AddRange(bytes);
return Lbytes.ToArray();
XOR декодирование
byte b = buffer[1];
int dataLength = 0;
int totalLength = 0;
int keyIndex = 0;
if (b - 128 <= 125)
{
dataLength = b - 128;
keyIndex = 2;
totalLength = dataLength + 6;
}
if (b - 128 == 126)
{
dataLength = BitConverter.ToInt16(new byte[] { buffer[3], buffer[2] }, 0);
keyIndex = 4;
totalLength = dataLength + 8;
}
if (b - 128 == 127)
{
dataLength = (int)BitConverter.ToInt64(new byte[] { buffer[9], buffer[8], buffer[7], buffer[6], buffer[5], buffer[4], buffer[3], buffer[2] }, 0);
keyIndex = 10;
totalLength = dataLength + 14;
}
if (totalLength > buffer.Length)
throw new Exception("The buffer length is small than the data length");
var key = new byte[] { buffer[keyIndex], buffer[keyIndex + 1], buffer[keyIndex + 2], buffer[keyIndex + 3] };
int dataIndex = keyIndex + 4;
int count = 0;
for (int i = dataIndex; i < totalLength; i++)
{
buffer[i] = (byte)(buffer[i] ^ key[count % 4]);
count++;
}
string res = "";
try
{
res=Encoding.UTF8.GetString(buffer, dataIndex, dataLength);
}catch(Exception ex)
{
res = "all:a";
}
return res;
НАЙДЕНО
если значение документа "hello"
(чистая строка без \ n или \ r или пробелы)
или
"{'name':'newname'}"
(чистая строка без \ n или \ r или пробелов)
авария
если значение документа " "
(пробел x4)
ошибка с
если значение документа "{'name':'newname'},{'name':'newname'},{'name':'newname'},..."
со многими ошибками, может быть алгоритм XOR (в C #)