Q:
我实现的是read函数一个数据在规定的时间内(ReceiveTimeout )没有得到数据,就循环read三次。本来期望每次read函数都能等待ReceiveTimeout这个时间。
但是实际情况是只有第一次等待了这么长时间,以后的read就马上返回,还提示没有读到数据。请高手解答。急!!ReceiveTimeout这个属性到第二次怎么就失效了呢?
我的代码大概是:
TcpClient _tcpsocket = null;
NetworkStream _stream2Server;
_tcpsocket = new TcpClient(BHSServerName, BHSServerPort);
_tcpsocket.ReceiveTimeout = BHSWaitPRTimeOut;
_stream2Server = _tcpsocket.GetStream();
int i = 0;
byte[] _buffer = new byte[200];
while(i <3)
{
int bytesRead = _stream2Server.Read(_buffer, 0, _buffer.Length);
i++;
}
A.
NetworkStream有个DataAvailable只读属性
当第一次read失败后,该属性会自动变为false
所以循环体应该改为
while(i <3)
{
if(DataAvailable)
{
int bytesRead = _stream2Server.Read(_buffer, 0, _buffer.Length);
i++;
}
else
sleep(3000);
}