1

我继承了一些循环通过 BinaryReader 的响应的代码,它工作正常(返回 2 个字节)一段时间,但随后客户端需要一段时间来响应(我假设)并且代码陷入困境逻辑。

我找不到任何关于 ReadByte() 将等待多长时间的文档,它似乎等待大约 3 秒,然后失败。

有谁知道 ReadByte 是如何工作的?我可以将其配置为以某种方式等待更长的时间吗?我的代码如下,谢谢。

public virtual Byte[] Send(Byte[] buffer, Int32 recSize) {
    Byte[] rbuffer = new Byte[recSize];

    var binaryWriter = new BinaryWriter(stream);
    var binaryReader = new BinaryReader(stream);

    Int32 index = 0;
    try {
        binaryWriter.Write(buffer);

        do {
            rbuffer[index] = binaryReader.ReadByte(); // Read 1 byte from the stream
            index++;
        } while (index < recSize);

    } catch (Exception ex) {
        Log.Error(ex);
        return rbuffer;
    }
    return rbuffer;
}

PS - 代码中的 recSize 为 2,它总是期望返回 2 个字节。

4

1 回答 1

2

BinaryReader本身没有超时,它只是底层流的包装器。超时的事情是您作为stream. 您必须修改该对象的超时时间(如果该流也只是另一个包装器,则它是父对象)。

您根本不需要使用 BinaryReader 来做您想做的事情,同时假设bufferbyte[]也不需要 BinaryWriter。

Byte[] rbuffer = new Byte[recSize];

try {
    stream.Write(buffer, 0, buffer.Length);

    Int32 index = 0;
    do
    {
        index += stream.Read(rbuffer, index, rbuffer.Length - index);
    } while (index < recSize);

} catch (Exception ex) {
    Log.Error(ex);
    return rbuffer; //I would either let the exception bubble up or return null here, that way you can tell the diffrence between a exception and an array full of 0's being read.
}
于 2013-10-16T17:33:15.783 回答