这是因为你的以下这段代码的问题
 while(i == conn.BufferSize)
 {
   Array.Clear(buffer,0,buffer.Length);
   i = conn.DataSocket.Receive(buffer);
   sb.Append(conn.EncodingMode.GetString(buffer,0,i));
 }
 i = conn.DataSocket.Receive(buffer);你认为每次接受的都是连续的,所以每次都会将BufferSize填满,当i!= conn.BufferSize时就只剩下一次没读的了,这是错误的,因为这是网络编程,每个包的大小由实际的状况决定,打个比方对方的list回来的那个文件流比一个TCP包大,于是就用两个包来发,但这时,你接受端对第一个包进行了接受的最后是这个包的大小不能被你的buffer.Size整除,于是你就跳出循环了,再读一次就不读了,这样第二个包的数据全丢了。所以你的程序会有问题,这种网络的东西不同于本地是不能按大小来分的,除非你的网络条件超级好,否则就会出错。你的判断条件应该是每个string的结束+回车即ASIC的10和13而不是读的大小另外,网络的东东最好用异步的来写