通过套接字TCP / IP发送数据时出错

时间:2018-08-27 20:35:49

标签: c# sockets tcp websocket

下午好。 我正在尝试通过套接字(在C#中详细介绍)将流发送到JavaScript中的websocket,而JavaScript发送的数据较少。我收到一个我不知道以下内容的错误:

  

“无法将数据写入传输连接:对等连接重置。”

CODE

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;        

发现

如果docs值为"hello"(干净的字符串,不能为\ n或\ r或空格)

"{'name':'newname'}"(干净的字符串,不能使用\ n或\ r或空格)

崩溃

如果文档值" "(空格x4)

错误

如果文档值"{'name':'newname'},{'name':'newname'},{'name':'newname'},..."

具有很多值的失败,可能是XOR算法(在C#中)

1 个答案:

答案 0 :(得分:0)

在很多次尝试之后,我发现以下内容,因此不会发生此错误:

第1步\n \r \t那样清洁字符串并分开(规范化以使它们不超过4)。

步骤2 不超过发送的3 MB数据。

感谢您的帮助,希望对您有所帮助(我会发送图片,但仍然无法发送图片)