我实现的是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++;
}

解决方案 »

  1.   

    可能也是这个原因,不能连续读,但是怎么实现我这个功能呢?
    在不重新建立socket的情况下?
    因为我要重读三次,才重连socket !!
    谢谢,兄弟们@@ 急呀!
      

  2.   

    现在的最新发现是第一次timeout完毕,第二次重读的时候会产生“无法从传输连接中读取数据: 无法立即完成一个非阻挡性套接字操作。”的异常 属于IOException  
    请问各位高手就没遇到过这个问题么?谢谢了!!
    我把希望寄托在你们这了!
    我马上就要出差解决这个问题了
      

  3.   

    这个问题还是我自己来解答吧
    NetworkStream有个DataAvailable只读属性
    当第一次read失败后,该属性会自动变为false
    所以循环体应该改为
    while(i<3)
    {
      if(DataAvailable)
      {
        int bytesRead = _stream2Server.Read(_buffer, 0, _buffer.Length);
        i++;
      }
      else
        sleep(3000);
    }