需要在任一机器上检测本网其它机器的联网状态
如有必要,可以所有机器上安装辅助程序如实在难以实现,可退而求其次,在某一具体机器上检测本网其它机器的联网状态给出实现原理及核心算法即可。

解决方案 »

  1.   

    不用呀,
    1。得到自己IP
    2。循环最后部分(0~255)ping
    3。检测返回状态即可具体函数查查以前的帖子,都有
      

  2.   

    要求用程序实现
    这是某大型程序的一个功能块
    尽量少占用CPU资源
      

  3.   

    辅助程序程序是什么意思啊
    如果要写辅助程序的话你可以用UDP协议或TCP/IP协议来实现啊
      

  4.   

    服务器维持1个在线列表,客户阁1段时间发1个UDP信息表示在线,对那些超过时限没发信息的机器就认为离线了,从在线列表里删除。
      

  5.   

    我试过客户方用TCP协议联结服务器,则当客户方物理连接中断后可能有约55秒的时间无法响应用户输入。
    如使用UDP,为满足“实时“的需要,发送数据的时间间隔可能有点小,会不会有数据冲突/丢失?
      

  6.   

    55秒的时间无法响应用户输入是什么意思啊(难道你用的阻塞模式吗??)
    你可以做一个监测是否连接的头啊,在你规定的响应时间内没有收到的话就认为连接断开了
    这个和UDP,TCP/IP没有关系的
    UDP传输的效率要比TCP/IP高,但是你自己的校验数据
    在局域网内不用考虑那么多了,用TCP/IP已经足够了
      

  7.   

    现象是这样的:
    程序主线程中使用SOCKET进行联接,拔掉CONNECT方的机器的网线后,程序有时会无法响应用户输入,也不刷新界面,约55秒后恢复正常。但不是每次都有此现象出现。
    使用的是MFC的CAsyncSocket派生出的类。
      

  8.   

    我做的时候是:
    是服务器新开一个特别的 UDP SOCKET专门收取在线信号,同时维护一个在线机器的列表,列表项用一个结构,结构里一个  int ID=x 标志在线机器的ID, 再一个int life=n标志在线机器生命期,一个定时器每1秒对列表里所有客户的life减1,当哪个客户的life的减到0就认为他断线了,从在线列表里删除。
    客户通过每一段时间(比如1秒)发送1个UDP信息给服务器,服务器收到这个信息后就把列表里和这个客户对应的ID的life置5,这样客户不断表明在线他的life就不会减到0而被删除,如果客户连续5秒都没发UDP信息给服务器就认为他离线了,不管他是死机了还是被拔了网线还是停电了。
      

  9.   

    这个服务器也只是一个UDP SOCKET 和一个列表,不用专门做1个软件,集成到每个客户端就可以了。
      

  10.   

    同意sboom(LingCh) 
    如果没有什么特殊需求的话已经足够用了
      

  11.   

    如果不用CS结构的话,中有一个服务端程序,那就只能用PING了吗?