请教关于 NetworkStream 两次读取相同数据流出错的问题
两台主机相互通信 主机A把数据库返回的DATASET数据集序列化后 计算序列化后BYTE数组的长度 再序列化形成第二个长度为59的BYTE数组 把两个数组合并后通过NetworkStream.Write向主机B发送 主机B先读取前59个BYTE 然后反序列化后获得后续的真正数据BYTE数组长度 从而以此建立固定长度的个缓冲区来接受
byte[] k1 = new byte[59];
byte[] k2 ;
第一次读取 myNetwoekStream.Read(k1,0,59);
int length =(反序列化)k1;
k2 = new byte[length + 59];
第二次读取 myNetworkStream.Read(k2,0,59 + length);
最后通过FOR循环获得K2中第59位到最后一位的子数组,最终再反序
列化得到DATASET
但是当我设置断点后发现 前后两次读取数据流后数组 K1和 K2的前59个元素竟然不同 但应该是一样的啊 求教高手
第一次发贴,可能问题表达的不是很明白:) , 对问题有疑问的可以提问
------解决方案--------------------我一般把缓冲设为1024*800,不管传多少数据,即使是1K,也用这么大来接收,然后这样
int i = socket.receive();
再用Array.Copy( BufferData , 0 , ReceiveData , start , end );来把数据存到receiveData中,最后反序列化
------解决方案--------------------> > myNetworkStream.Read(k2,0,59 + length);
NetworkStream(或者任何一个其它的Stram)的Read操作是连续的。也就是说,如果头一次Read读取了59个字节,第二次是从Stream的第60个字节开始读的,不是第一个。
如果Stream支持Random Access的话(比如MemoryStream),可以通过设置Position改变当前Read的位置,不过NetworkStram是forward only的,只能顺序读一次。