局域网中有10台主机都安装一套相同的通讯程序(我要开发的),没有通讯转发服务器,这10机器如何知道彼此在线与否?TCP 和UDP那个好呢?希望有一个很好的解决方法,懂通讯的朋友们发言啦,恳请指点.

解决方案 »

  1.   

    一般来说分2种
    1. 每台机器都侦听端口;每台机器向网络中的所有机器依次发送注册信息。
    2. 设置一台服务器,每台机器向服务器注册,同时定期从服务器获得其他机器的注册信息。(当然,也可以开侦听端口,让服务器在收到注册/注消的时候,主动push到每台机器新的list)至于注册阶段是UDP还是TCP,并不是很重要,通信的时候还是用TCP比较好。
      

  2.   

    若是仅在局域网上,简单点可以采用无服务器方式。每台机器用UDP将自身状态广播到网上, 其它机器都可以收到。
      

  3.   

    是无服务器方式的,"每台机器向网络中的所有机器依次发送注册信息",如果有一台机器中异常下线
    该怎么更新所有的主机信息? 广播方式也存在这个问题,同时效率与性能是如何提高的呢?tcp 和 udp 那个效率(速度方面,可靠性)更高些呢?
      

  4.   

    tcp可靠性高, udp 那个效率好。不过在局域网中, 这些区别不是很重要。在无服务器时, 用UDP更新状态要好一些, 否则你都不知道哪台机器在线。
      

  5.   

    用tcp做重要信息传输,用udp 做用户在线与否等非重要信息的传输,可以么?
    我主要是考虑用户在线与否的状态更新速度不够快,同时该网中的用户IP是动态分配的,
    碰到这问题我该怎样设计我的系统呢?
      

  6.   

    UDP好,可以设置定时广播,比如5秒,这样如果超过5秒(可以略多于5秒,比如8秒)没有新的广播数据到来就可以认为对方不在线。