当使用TCP
客户机时,NetworkStream.read
方法通常不会返回完全填满的缓冲区。我怎样才能使它在写入整个数组之前阻止进一步的执行?
byte[] datagramByteForm = new byte[dgramSizeInt];
int j = dataIOStream.Read(datagramByteForm, 0, datagramByteForm.Length);//read the actual datagram
if (j != datagramByteForm.Length)
{
throw new Exception("Connection j value: " + j + " expected amount: " + datagramByteForm.Length);
}
最佳答案
实际上非常直接,您只需要在stream.read函数中使用提供的参数。
下面是一个示例(未经测试):
TcpClient TCC = new TcpClient("127.0.0.1", 200);
int cOffset = 0, dgramSizeInt = 5000, j;
byte[] datagramByteForm = new byte[dgramSizeInt];
var dataIOStream = TCC.GetStream();
while (cOffset <= dgramSizeInt)
{
j = dataIOStream.Read(datagramByteForm, cOffset, dgramSizeInt-cOffset);
cOffset += j;
}
关于c# - 通过Tcp Client读取大数据包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45656640/