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