做个p2p的东西,服务器是公网的,客户端A是ADSL网络,客户端B不是ADSL。A向B发消息时B能收到,但B向A发送时A收不到,测试发现所有的ADSL网络都有这种问题,用服务器转发当然可以收到(打洞肯定是成功了),现在不想让服务器承受那么大的压力,有什么办法可以不通过服务器转发,而又能让ADSL网络的用户A收到B发的消息呢?

解决方案 »

  1.   

    http://topic.csdn.net/u/20080429/11/31dea162-88f5-4fd6-a3c8-6d972747cbf8.html这是另外一个帖子。
      

  2.   

    如果A想连接B网络中的一台主机C,那么服务器告诉C,让C主动去连接A就行了。这是反向连接。
      

  3.   

    如果是你的路由器不支持穿透那就没办法了,这时可以考虑UPNP端口映射
      

  4.   

    楼主你“打洞”没成功嘛,成功的话应该是欺骗了NAT路由器并在两个不同的子网中建立P2P连接
      

  5.   

    而且是不经过端口映射的,一般是利用公网服务器辅助打洞
    一般是A、B两台内网机器都连接公网服务器,然后A想直连B的话就向公网服务器转发请求,让B主动新建一个指向服务器的连接,此时B所在子网的NAT路由器会新建一个NAT地址转换(其实就是个端口映射),服务器就会知道B新建的连接对应的外网端口号,然后将端口号告诉A,并断开B新建的这个连接。B马上监听新建连接的那个绑定端口,同时A马上连接B对应的公网IP及公网端口(服务器告诉A的那个端口号)。一条NAT地址转换规则会在路由器中存在一段时间,所以A连接B是可行的。但有的路由器的NAT地址转换有限制,例如本来是连出的链路,路由器就不接收连入的数据包了,这样会导致A仍旧无法连接B。
    上面包含个人理解部分,不保证完全正确。
      

  6.   

    这个? 我在这个方面不太熟悉  紧密关注中>>>...学习~
      

  7.   

    你所说的“ADSL网络”是指多台电脑通过ADSL路由上网吗?