没有一个自己的中间服务器,可以记录client端的公网ip和端口,再通知其他端。
我想,如果client端能主动得到自己某个端口被nat映射后的公网ip和端口,还可以通过其他方式通知。
或者各位高人还有其它在没有自己的中间服务器的情况下,实现p2p的方案,也请不吝赐教。

解决方案 »

  1.   

    必须要通过一个服务器做STUN,才能获得自己的网络状况数据
      

  2.   

    总要有一个提供中转服务的东东吧。
    要不你就让两边都开着QQ或MSN,通过它们send message啊
      

  3.   

    各位,大家好,我是搂主
    我不是说没有中间服务器,而是说没有自己的中间服务器。
    如果我有自己的中间服务器,那client端通过nat连到中间服务器,中间服务器马上就能查出这个连接来自何方,端口号是几。但现在不行。所以必须用其它的方法。比如client端能主动得到自己某个端口被nat映射后的公网ip和端口,那它可以将这个信息发送到一个邮件服务器上,另一端去查询邮件,就知道了。我还有一个思路是利用msn 或qq等的中间服务器,但这需要解析他们的协议,也很烦。
    利用中间服务器应该是必需的,只是没有自己的中间服务器好利用。 各位明白我的意思了么?
      

  4.   

    TO 搂主   中间服务器是必须的,还需要一个静态的IP地址,如果没有可以使用“花生壳”生成一个静态的地址。
        UDP的打洞技术,必须先和服务器取得联系,通过服务器作为两个用户的“中介”,之后才可以抛弃中间服务器,达到P2P的效果。
        至于如何穿越中间的代理服务器,请参考http://community.csdn.net/Expert/topic/4201/4201996.xml?temp=.5598566
      

  5.   

    这两天研究p2p技术,突然有一种想法,也许我们今天研究p2p,就像十多年前dos程序员研究覆盖技术一样,随着ipv6大潮的到来,终将成为历史。各位还有没有好的办法了?准备结贴了。hoho.
      

  6.   

    n年前我也有过楼主的想法,并且简单实现了了一个完全不需要服务器的P2P.
    呵呵,其实是用email交换数据。至于效率嘛,当然就是惨不忍睹了
      

  7.   

    不要服务器也是可行的。纯P2P也是可以实现的。
    假设全球有30千万个IP地址,某P2P软件有10万在线用户,其中有3万个用户在公网上。
    则每个用户启动连接在1秒内(正常网络状态下节点存在的估计平均时间值)可以连接到一个用户的概率为1/10000,连接不上的概率为9999/10000,每个公网用户被连接上的概率为1/30千万 * 10万 = 1/3000,没有被连接的概率为2999/3000。这里都假定连接不上的超时时间为3秒。
    如果每个用户同时向300个地址发起连接,则每个用户一次连接到别人的概率为3/100,公网用户被连接到的概率为1/10,一个内网用户可以建立连接的概率为3/100。按照概率论,以3秒为一轮,一个内网用户76轮连接到一个用户的概率为90%,用时3*76=228秒,不到4分钟。从概率的角度上讲,通过传递相互连接到的PEER,在4分钟之内几乎全世界的PEER都可以连接起来。
    要实现这种纯P2P的连接,关键一点就是要求用户群达到一定数目。
    如果连接策略做的好,花费的时间会更短。