Ошибка отправки данных через Socket TCP / IP - PullRequest
0 голосов
/ 27 августа 2018

добрый день. Я пытаюсь отправить поток через сокет (разработанный в 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 #)

1 Ответ

0 голосов
/ 29 августа 2018

После многих, многих, многих ... попыток я обнаружил следующее, чтобы эта ошибка не возникала:

шаг 1 очистить символьную строку как \n \r \t и отделить (нормализовать так, чтобы они были не более 4).

шаг 2 не превышает 3 МБ отправляемых данных.

Спасибо за вашу помощь, и я надеюсь, что это поможет вам (я буду отправлять изображения, но я все еще не могу)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...