Code Bye

NetworkStream的问题

在客户端:
ns.Write()
ns.Write()
ns.Write()
ns.Write()
ns.Write()
ns.Write()
写了6次
在服务端
NetworkStream stream = client.GetStream();
stream.Read();
stream.Read();
stream.Read();
stream.Read();
stream.Read();
stream.Read();
读6次,前4次读出的内容没错,第5次后面的数据全是错的。
莫非不能这样连续写,连续读吗?
解决方案

20

引用 6 楼 ccandtv 的回复:

本人Write()的大小跟Read()都是一一对应的,不可以这样操作?以前从来没接触过NetworkStream
如 :
发送
Write(byteA,0,4)
Write(byteB,0,x)
Write(byteC0,4)
Write(byteD,0,y)
Write(byteE,0,4)
Write(byteF,0,z)
接收:
Read(byteA,0,4)
Read(byteB,0,x)
Read(byteC0,4)
Read(byteD,0,y)
Read(byteE,0,4)
Read(byteF,0,z)
全都是一一对应的。 那怎么接收的时候前4条数据没问题呢?

你Read函数传入读取的字节数不一定是你实际读取到的字节数,这个参数只是保证你这次读取最多读取到的字节数
你必须要判断函数返回的实际读取到的字节数
//
// 摘要:
//     从 System.Net.Sockets.NetworkStream 读取数据。
//
// 参数:
//   buffer:
//     类型 System.Byte 的数组,它是内存中用于存储从 System.Net.Sockets.NetworkStream 读取的数据的位置。
//
//   offset:
//     buffer 中开始将数据存储到的位置。
//
//   size:
//     要从 System.Net.Sockets.NetworkStream 中读取的字节数。
//
// 返回结果:
//     从 System.Net.Sockets.NetworkStream 中读取的字节数。
//
// 异常:
//   System.ArgumentNullException:
//     buffer 参数为 null。
//
//   System.ArgumentOutOfRangeException:
//     offset 参数小于 0。 – 或 – offset 参数大于 buffer 的长度。 – 或 – size 参数小于 0。 – 或 – size
//     参数大于 buffer 的长度减去 offset 参数的值。 – 或 – 访问套接字时出错。 有关更多信息,请参见备注部分。
//
//   System.IO.IOException:
//     基础 System.Net.Sockets.Socket 被关闭。
//
//   System.ObjectDisposedException:
//     System.Net.Sockets.NetworkStream 是关闭的。 – 或 – 从网络读取时出现错误。
public override int Read(byte[] buffer, int offset, int size);


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明NetworkStream的问题