可以设置超时,但你现在的情况不是一般的超时(因为有数据发送过来),而且也不能直接4秒一次(网络延迟会扰乱这个间隔)。
建议最好能够知道每次会接收多少字节,然后让BeginReceive就接收这些数量的字节,这样在接收到足够数量的数据后,BeginReceive就结束并开始回调了。

解决方案 »

  1.   

    主要不知道服务器的机制还是我的程序有逻辑问题我是SOCKET刚入门,所以不能做的很好。。
    回调函数是框架是这样。
     int getbytes = client.EndReceive(ar)
     if(getbytes>0)
        {
          if(respond.contains(...))
            {
                state 1
                receivedone.set();
            }
          else
            {
               client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new      AsyncCallback(ReceiveACallback), state) //相当于再次尝试
            } 
         }  else //bytes==0
         {
             print some message;
         }  如果逻辑没有问题的话就是服务器的运行原理导致的了我不能乱改CODE自己试,那一百来万的服务器出了点问题我也虚所以我每次改CODE运行都得到允许才行。