日期:2014-05-19  浏览次数:21090 次

请问在Socket类中如何实现超时重发?
Socket基于TCP,处于阻塞模式。函数结构如下
private   String   SendAndReceive(Byte[]   temp,   Int32   location,   int   length)
{
bool   Sending   =   true;
bool   firstSend   =   true;
while   (Sending)
    {
      try
          {
              if(!firstSend)
              {
                    Sending   =   false;
              }
              skSocket.Send(temp,   (length   +   4),   SocketFlags.None);
              num   =   skSocket.Receive(byt);
              str   =   byt.ToString();
              return   str;
            }
      catch   (Exception   error)
      {
            if   (firstSend)
                {
                      firstSend   =   false;
                }
              else
                {
                      throw   new   Exception;
                }  
        }
    }
}


在这个结构下,一旦skSocket.Receive发生超时,再次调用时就直接处于超时状态,而不是等待skSocket.ReceiveTimeout时间后再超时。请问如何清除skSocket.Receive的超时标志?

------解决方案--------------------
我看见别人是把skSocket的接收缓冲区直接每次清空
------解决方案--------------------
牧野老兄的博客上有
http://blog.csdn.net/wzd24/archive/2007/04/13/1564112.aspx
------解决方案--------------------
www.lslnet.com/linux/dosc1/34/linux-260387.htm