最近在做一个网络通讯系统,需求是:
1、实现点对点,点对多,多对多的互相通讯;
2、使用TCP连接,保证数据的可靠性;
3、无服务器,即每台主机既是客户端又是服务器,不想维护服务器;
4、可以在各种网络环境下都能实现通讯,如内网与公网,公网与公网,内网与内网(好像要涉及到NAT穿透)
我在网络编程方面完全是个新手(异步通讯看了几天也没完全整明白),但是任务紧急,有哪位大神能给个可行的设计方案,如果能有实际代码就更好了,谢谢啦!网络编程

解决方案 »

  1.   

    呵呵,这个东西够你做上几个月,如果是小规模的系统,客户端不多的话,而且只是在局域网中通讯的话,还比较容易,可以用UDP广播来找到其他客户端,但你如果 要在公网下实现,就不可能用udp广播了,在tcp这层上实现点对点的通讯,没有服务器协助,就一个如何找到其他客户端就是一个想破头的难题,建议你还是设立一台服务器,服务器不承担通讯的任务,只承担发现客户端的任务,这样容易一些,
      

  2.   

    没有公网服务器绝对不行的,NAT这关你过不去啊。
      

  3.   

    你的需求需要穿越防火墙。
    建议使用XMPP协议,需要服务器端,但有很多开源的服务器端,开源的客户端也非常多。
      

  4.   

    是不是没有公网服务器就一定不可能穿透nat
      

  5.   

    公网服务器是为了能获取路由器分配的IP和端口
    并且协助打洞
    没了服务器,双方怎么知道IP和端口?
    发短信?
      

  6.   

    一切信息都是透明的,我知道他的内网IP和端口,他也知道我的,现在就是两个都是不同内网的IP,该怎么通讯
      

  7.   

    1、实现点对点,点对多,多对多的互相通讯;
    就是p2p.类似电驴之类的软件都是这种方式。包括QQ中的视频音频。
     2、使用TCP连接,保证数据的可靠性;
    不能使用tcp,没办法穿透NAT。
     3、无服务器,即每台主机既是客户端又是服务器,不想维护服务器;
    p2p也是需要至少一台服务器作为会话管理的,对于2台不同内网的电脑需要一台服务器作为辅助建立连接。
    这个连接过程需要多次穿过NAT,具体过程比较复杂,但是度娘很精通~~
     4、可以在各种网络环境下都能实现通讯,如内网与公网,公网与公网,内网与内网(好像要涉及到NAT穿透)基于udp之上的改进协议可以满足你的要求。
      

  8.   

    我的想法是:每个节点软件商可以列出所有其他节点IP,通讯时先选择某个节点IP 建立连接 通讯。注意每个节点上的软件都既有监听又有连接。即既可做 服务段也可做客户端 。
      

  9.   

    没有服务器的话应该要用udp协议吧?局域网就有弄过 ,公网的不会...