string receiveData = "";
            int recvCount;//每次读取的数据量
            int availCount = 0;//获取从网络可以读取的数据量
            byte[] buffer = new byte[1 * 1024];//一个4×1024bits的缓存区
            do
            {
                availCount = CommonVariable.RongcaiSoket.Available;
                if (availCount < buffer.Length)
                {
                    recvCount = CommonVariable.RongcaiSoket.Receive(buffer, availCount, 0);
                }                else
                {
                    recvCount = CommonVariable.RongcaiSoket.Receive(buffer, buffer.Length, 0);
                }
                availCount = CommonVariable.RongcaiSoket.Available;
                if (recvCount > 0)
                {
                    receiveData += Convert.ToBase64String(buffer);
                }
            } while (availCount > 0);
            byte[] btable = Convert.FromBase64String(receiveData);
            object table = ByteToObject(btable);//将二进制转换成object对象
            return table;以上分次读取一次性传递来的数据,上述代码传递字符串时有效,但是如果传递的是datatable,则提示包含无效字符。大家看看红色地方能有什么更好的方法来连接分次读取出来的数据吗?
下午下班前结贴。。谢谢大家!!!

解决方案 »

  1.   

    建议把byte[]全部读出来后,再进行Convert.ToBase64String(buffer); 
    最后转化为byte[] Convert.FromBase64String(receiveData); 也就是把这两个操作都放到循环外来做。
      

  2.   

    zhiqiangzhan            放到循环外面,那byte[]类型的怎么进行连接呢,,这里只有字符串才好连接。
      

  3.   

    因为你是用string来保存中间结果,所以传递字符串没问题,现在传送的是二进制对象,所以在转换字符串,又从字符串转换回来的时候出了问题,建议换个思路:1,发送方先发送传送的大小,接收方收到后,根据这个大小来分配一个byte的数组,并予以响应;
    2,发送方收到接收方的回应后再发送内容;
    3,接收方将收到的数据放入字节数组中,最后再回原成对象。不要转换来转换去的。