TcpClient tcpclnt = new TcpClient();
            tcpclnt.Connect(StrIp, port);
            Stream stm = tcpclnt.GetStream();
            UTF8Encoding asen = new UTF8Encoding();            byte[] bb = new byte[1024];
            int k = stm.Read(bb, 0, 1024);
            while (k > 0)
            {
                string Str = System.Text.UTF8Encoding.UTF8.GetString(bb, 0, k);
                OnlineInf.Write(Str);
                k = stm.Read(bb, 0, 1024);
            }
程序执行时,如果stm中的数据少于1024,则一切正常.
如果大于1024,则第1025个数据丢失,后面的数据也正常,
如:".....我是谁......"这一段,
  如果".....我"长度为1024,则".....我"和"谁....."都正常取出,只有"是"丢了.
请问该如何处理????
  

解决方案 »

  1.   

    你这样做是容易出问题的,因为UTF-8编码的原因,你接收到的数据(k字节)可能不是一个完整的UTF-8编码的字节流。
    你可以将str反向编码成UTF-8字节流,其长度如果与k不相等,则说明有数据丢失了。建议你采用UDP协议来收发数据,如果一定要用TCP协议,请采用一定的技术手段确保收到的数据是完整的。
      

  2.   

    用utp协议不能保证数据的完整和顺序,我只能用TCP,
    dz_huanbao说的"采用一定的技术手段确保收到的数据是完整的",能提个思路吗?
    谢谢!!!!!!!!!!!!!