if(recv(client,buff,1024,0)==SOCKET_ERROR)
}
cout<<WSAGetLastError()<<endl;
closesocket(client);
accept();
}
利用心跳包判断 对方是否掉线
大于间隔时间算超时重新监听
用GetTickCount() 这个判断不知道怎么写
}
cout<<WSAGetLastError()<<endl;
closesocket(client);
accept();
}
利用心跳包判断 对方是否掉线
大于间隔时间算超时重新监听
用GetTickCount() 这个判断不知道怎么写
我不懂 的是减去的是什么时间?怎么得到的
心跳包发送后通过一个循环来不停的判断你发送心跳包后多少时间内没收到应答,就是用GetTickCount()减去TimeStart。如果WaitTime大于你的超时设置的时间,就可以认为超时了。如果在时间内收到,就认为没超时,跳出循环。然后下次发送心跳包同样处理
TimeStart = GetTickCount();
while(1)
{
WaitTime = GetTickCount() - TimeStart;
Sleep(50) ;
}
检测心跳包超时是否正确?
while (1)
{
stop:client=accept(ser,(SOCKADDR*)&clientaddr,&len);
DWORD lngPassTime=0;
while(lngPassTime<=3000) //心跳包发送的间隔时间为2秒
{
DWORD lngStartTime=GetTickCount();
if(recv(client,buff,1024,0)==SOCKET_ERROR)
{
cout<<WSAGetLastError()<<endl;
closesocket(client);
goto stop;
}
lngPassTime=GetTickCount()-lngStartTime;
cout<<buff<<endl;
send(client,"收到!",strlen("收到")+1,0);
}
closesocket(client);
goto stop;
}