小妹急问:PC做服务器,接多台ARM嵌入式,如何及时的判断连接台数

小妹急问:PC做服务器,接多台ARM嵌入式,怎么及时的判断连接台数?
一个C/S项目,是基于ARM的多台嵌入式系统连接PC,PC做服务器接收多台ARM的数据。我用的是WSAAsyncSelect模式。现在的情况是:连接、接收数据都没有问题,但是如果有一台ARM中间断开后,PC要过大概30秒才能判断连接断开。

我之前在VC中,用WSAAsyncSelect注册FD_ACCEPT 、FD_CLOSE消息来判断连接的台数,但是发现很多时候连接断开后并没有收到FD_CLOSE消息!现在我用给每台客户端发送心跳包的形式来检测连接台数,也就是每隔一秒给每个SOCKET发送心跳数据,如果发送成功,表明连接正常,如果发送不出,则表明连接断开。如下:
n=send(p-> m_clients[i], (char*)comcode,   6, 0);
根据n的返回值来判断是否发送成功。

现在的问题是:这样判断,总体结果是正确的,也就是说如果有断开时,过30秒后显示的连接台数才是正确的!这显然无法让人接受!

请问各位怎么让其中一台客户端网络断开时,VC立即就知道断开了?



小妹急问:PC做服务器,接多台ARM嵌入式,如何及时的判断连接台数
socket 嵌入式系统 c/s

------解决方案--------------------
检测是否掉线的线程的实现如下:

发送心跳包的线程:(每1秒发送1次)

while(1)
{
    sendHeartPkg();//收到信号包的下位机应答该心跳包,(该心跳包最好广播发送)
    sleep(1000);
}


检查是否掉线的线程:

while(1)
{
    checkOffline();//检查是否有应答(如3次检查都没有应答,则表示设备掉线,前提设备如果没有掉线,3秒内必定有应答)
    sleep(1000);
}

这种方式3秒内就可以检测出设备是否掉线,看你的需要来改变检测时间


当然了你也可以用定时器实现,检测和发送心跳包可以放同一个线程