当前位置:编程学习 > C#/ASP.NET >>

C#编程遇到一个奇怪问题

try
                {
                    clientSocket.Receive(inBuffer, 10, SocketFlags.None);
                    int backlen = Int32.Parse(Encoding.GetEncoding("GBK").GetString(inBuffer));
                    MessageBox.Show("接收字符长度为"+backlen.ToString());
                    
                    clientSocket.Receive(inBuffer, 40, SocketFlags.None);
                    inBuffer = new Byte[20000];
                    List<byte> getbyte = new List<byte>();
                    while (clientSocket.Receive(inBuffer, backlen-40, SocketFlags.None) > 0)
                    {
                        getbyte.AddRange(inBuffer);
                    }
                    byte[] getbuff = getbyte.ToArray();

                    richTextBox2.Text = DecryptDES(getbuff, textBox3.Text);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

代码如上,此段代码是要接受socket,数据流的规则是前10个字符为报文的整个长度(算上40个空格),后40个字符为空格,然后是数据包(密文)

以上代码的作用就是解密,但是很奇怪的是,
MessageBox.Show("接收字符长度为"+backlen.ToString());
这句代码影响着解密的成败,如果有这句,解密就会成功,如果没有,解密会成功一半,如下图


请高人解答,本人C#水平实在是没法解决这个问题 c# 解密 --------------------编程问答--------------------  MessageBox.Show("接收字符长度为"+backlen.ToString());
=>
System.Threading.Thread.Sleep(50); --------------------编程问答-------------------- 弹出对话框,给了更多时间让数据写入缓存,保证了数据的全部到达,不写,运行 很快,那没写完数据,就开始读取了,所以建议你不要直接读,还是要制定协议,确认数据是否接受完整 --------------------编程问答-------------------- 空的byte[]转成string 貌似是\0    会有很多\0  记得替换 --------------------编程问答-------------------- 2 # 应该说的对吧,是不是前后的编码不一致。转码错误。 --------------------编程问答-------------------- //读取服务器端返回来的消息
        public static String getJsonFromServer()
        {
            byte[] data = null;
            String backJson = null;
            try
            {
                Debug.WriteLine(client.Connected + "连接否");
                networkStream = client.GetStream();
                int len = getJsonLen();
                data = new byte[len];
                int index = 0;
                int readLength = 0;
                while (index < len)
                {
                    try
                    {
                        readLength = networkStream.Read(data, index, len - index);
                    }
                    catch (Exception ee) 
                    {
                        Debug.WriteLine("Client getJsonFromServer()","read readLength is error "+ee.Message);
                    }
                    if (readLength > Number.COMPARE_ZERO)
                    {
                        index = index + readLength;
                    }
                    else
                    {
                        break;
                    }
                }
                networkStream.Flush();
                backJson = Encoding.UTF8.GetString(data);
                Debug.WriteLine(backJson);
            }
            catch (Exception ee)
            {
                Log.writeLog("Client getJsonFromServer()", App.Current.FindResource("Get_Json").ToString()+ee.Message);
            }
            return backJson;
        }

//获得字符串的长度
        private static int getJsonLen() 
        {
            byte[] lengthdata = new byte[4];
            for (int i = 0; i < 4; i++)
            {
                lengthdata[3 - i] = (byte)networkStream.ReadByte();
            }
            int len = BitConverter.ToInt32(lengthdata, 0);
            if (len > Number.COMPARE_ZERO)
            {
                return len;
            }
            else 
            {
                return 0;
            }
        } --------------------编程问答-------------------- 循环去读 直到读完 --------------------编程问答--------------------                     while ( clientSocket.Available > 0 )
                    {
clientSocket.Receive(inBuffer, backlen-40, SocketFlags.None)
                        getbyte.AddRange(inBuffer);
                    }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,