关于NetworkStream.Read方法
NetworkStream的发送接收问题。
发送端代码:
internal bool SendByteArray(byte[] buffer, NetworkStream stream)
{
if (buffer.Length == 0) return false;
try
{
WriteSize(stream, buffer.Length);
stream.Write(buffer, 0, buffer.Length);
stream.Flush();
return true;
}
catch (Exception)
{
return false;
}
}
如下的接收端代码没有问题:
internal byte[] ReceiveByteArray(NetworkStream stream)
{
int bufferlen = GetSize(stream);
byte[] resultbyte = new byte[bufferlen];
for (int i = 0; i < bufferlen; i++)
{
resultbyte.SetValue((byte)stream.ReadByte(), i);//每次顺序读取一个字节
}
return resultbyte;
}
但改成如下形式就不行了:
internal byte[] ReceiveByteArray(NetworkStream stream)
{
int bufferlen = GetSize(stream);
byte[] resultbyte = new byte[bufferlen];
stream.Read(resultbyte, 0, resultbyte.Length);
return resultbyte;
}
或者改成下面这样,还是不行:
internal byte[] ReceiveByteArray(NetworkStream stream)
{
try
{
int bufferlen = GetSize(stream);
byte[] resultbyte = new byte[bufferlen];
stream.Read(resultbyte, 0, resultbyte.Length);
return resultbyte;
byte[] data = new byte[1024];
int index = 0, bytesread = 0;
//int r = data.Length;
while (index < bufferlen && (bytesread = stream.Read(data, 0, data.Length)) > 0)
{
//r = bufferlen - index >= 1024 ? 1024 : bufferlen - index;
data.CopyTo(resultbyte, index);
index += bytesread;
}
return resultbyte;
}
catch (Exception)
{
throw;
}
上面代码段中,WriteSize()和GetSize()分别是向stream中写入和读取流中数据大小信息的方法。
现在的问题是,不想用ReadByte()方法, 但是用Read()方法,想了很多办法都不行,其中有粘包问题,数组超界问题,各种问题,确定发送端没有使用多线程。
请高手帮忙看下是怎么回事,这段接收的代码该怎么写?
...全文
相关推荐
Visual C#.Net网络程序开发-Tcp篇(2).doc
通过Stream.Write和Stream.Read方法,开发者可以统一地发送和接收数据,无需关心数据的具体内容。这种设计使得代码更易于理解和维护。
2.1.3发送数据和接收数据
发送数据和接收数据的两种方法发送数据可以用Socket类的Send方法和NetworkStream类的Write方法接收数据可以用Socket类的Receive方法和NetworkStream类的Read方法 Socket类的Send方法的原型有如下 public int Send( byte[] buffer ) public int
vbtcp协议.pdf
此外,Close方法用于关闭流,Flush清空缓冲区,Read和Write方法分别用于同步读写数据,Seek和SetLength则用于定位和设置流的长度。
tcpclient同时传输信息和文件
**创建NetworkStream对象**: 连接建立后,我们可以通过TcpClient的GetStream方法获取到一个NetworkStream对象,它用于读写网络数据。
c# tcpServer示例程序
stream.Write(buffer, 0, buffer.Length);// 接收数据byte[] receivedBuffer = new byte[1024];int bytesRead = stream.Read


