如何获得内网PC的公网IP地址及端口号(向请教P2P高手)!
----------------------------------------------------
网络上所见的P2P的软件大多是C\C++写的,请大家发表一些高见,
请大家多交流,指导!

解决方案 »

  1.   

    既然是内网,它怎么会有公网IP?这不矛盾吗?有公网IP,它还能叫内网?如果内网连接访问公网的资源,实际在外部看到的是网关的IP.而外网一般是不能直接连接内网计算机的,这需要在网关上用NAT做端口映射.
      

  2.   

    首先要有服务端相互交换clients的地址(如果大家都在内网,谁也不知道是谁),举例:谈恋爱要先有媒人介绍,但真正谈起来了,媒人就不用操心了!~~~~~~~~
      

  3.   

    http://www.delphibox.com/article.asp?articleid=718http://www.delphibox.com/article.asp?articleid=53
      

  4.   

    TO: ehom(?!);
    你熟悉网络通讯? 才怪?
    -----------------------------------------
    NAT技术上说得很明白! 你熟悉P2P吗?????
      

  5.   

    诸如NC,OPENCD及PPCN.net的一些资料我之前也看了些,可是关键的核心技术没有涉及!我现在是想大家请教P2P通讯的时候的一些SOCKET上怎么处理,就是如何处理内部在公网上IP及端口等等!-------------请高手指教!
      

  6.   

    aushqh(You Will Miss Me!) , 說話要注意, 如果答錯了就要被你諷刺, 誰還敢回復你的問題??
    ksaiy(消失在人海) 的鏈接打不開, why???就我知道, 還沒有辦法直接在內網得到, 隊非直接與route 內部通訊! 懂點網絡協議的人應該理解!
    但也不是說沒法, 有時,我們打開某個網站的網頁, 上面會顯示你的IP是多少, 下面就是根據這個原理來實現The following Delphi code uses ICMP and SNMP to detect the dynamic IP address of your router when it is connected to a WAN.It first gets the IP address of www.borland.com and then attempts to do a trace route to it. The trace route is only allowed to travel at most 1 hop. In a corporate environment, some changes are required in order to detect the router for the corporate environment.Since the first hop is definitely the router's IP address, it assumes it has gotten the gateway IP address.It then uses the SNMP protocol to discover the dynamic IP address that the router has been assigned with.var
      GatewayIP, BorlandIP: string;
      DynamicIP, origOid: string;
      I: Integer;
      SNMP: TIdSNMP;
      ICMP: TIdIcmpClient;
    begin
      SNMP := TIdSNMP.Create(nil);
      ICMP := TIdIcmpClient.Create(nil);
      try
      // Step 1: Get the Gateway IP address
      // Assumes the Gateway is only 1 connection away from the machine
        BorlandIP := GStack.ResolveHost('www.borland.com');
        ICMP.Host := BorlandIP;
        ICMP.TTL := 1;
        ICMP.ReceiveTimeout := 5000;
        ICMP.Ping;    GatewayIP := ICMP.ReplyStatus.FromIpAddress;  // Step 2: Query the gateway using SNMP
      // This assumes the gateway is the immediate connection to the Internet
      // or leads to a xDSL modem running in bridging mode that connects to
      // the Internet    SNMP.Community := 'public';
        SNMP.Host := GatewayIP;
        SNMP.Query.Clear;
        origOID := '1.3.6.1.2.1.4.20.1.1';
        SNMP.Query.MIBAdd(origOID, '');
        SNMP.Query.PDUType := PDUGetNextRequest;    while SNMP.SendQuery do
          begin
            if Copy(SNMP.Reply.MIBOID[0], 1, Length(origOID)) <> origOID then
              Break;  // For each result, check that it is not the Gateway IP
      // If it is not, assume that it is the Dynamic IP
      // If a gateway has multiple IP addresses assigned, the last
      // IP address will be considered to be the Dynamic IP
            for I := 0 to SNMP.Reply.ValueCount - 1 do
              if SNMP.Reply.Value[I] <> GatewayIP then
                DynamicIP := SNMP.Reply.Value[I];        SNMP.Query.Clear;
            SNMP.Query.MIBAdd(SNMP.Reply.ValueOID[0], '');
            SNMP.Query.PDUType := PDUGetNextRequest;
          end;
      finally
        ICMP.Free;
        SNMP.Free;
      end;
      

  7.   

    哎,真弄不懂,你们这些版主是怎么想的,这也叫諷刺吗?你们说话认真一点人家也就就不会说什么?况且现在的论坛不增加点技术含量的讨论的话,我们怎么支持我的DELPHI语言,版主应该是我们这些程序员的带头人人,你说是不是?你的代码晚上我再调试下!
      

  8.   

    发誓不在DELPHI版再问问题!!!!!!!!!!!!!!!!!!!!!
      

  9.   

    NAT技术上说得很明白!
    -------------------------你把他说明白,我给你200分
      

  10.   

    不会再这里发贴问问题,也不提供这些资料,我已经被delphi版猪给移贴了!
    等我做出P2P的软件再来找你们算帐!
      

  11.   

    声明:本人没有滥用职权移你的帖,另外也不知道你后面的话什么意思,有什么意见说出来,或者去投诉,不要只是在短消息里质疑.如果你把问题换成如何实现NAT穿透,效果会更好.另外对你的个人素质深表遗憾.另外给你点私人看法:你最后的回复会让人觉得你心智还没发育完善的.
      

  12.   

    声明:本人没有滥用职权移你的帖,另外也不知道你后面的话什么意思,有什么意见说出来,或者去投诉,不要只是在短消息里质疑.如果你把问题换成如何实现NAT穿透,效果会更好.另外对你的个人素质深表遗憾.另外给你点私人看法:你最后的回复会让人觉得你心智还没发育完善的.
    ---------------------声明,对你的短消息只有一个,
    另外给你点私人看法:你之前的回复会让人觉得你心智还没发育完善的怎么弄到这么多分!
      

  13.   

    >>另外给你点私人看法:你之前的回复会让人觉得你心智还没发育完善的怎么弄到这么多分你满可爱的..
      

  14.   

    何谓无礼取闹:本贴本来时网路技术问题,本来问题没解决就算了,我结贴以后就被移到非技术区还扣我信誉分!
    这时哪个管理员做得事情!为人处事吗,我相信彼此彼此,不想上下啦!反正我从来就没有在DELPHI解决什么问题,不想浪费时间了!
      

  15.   

    TO: aiirii(ari-爱的眼睛) 就我知道, 還沒有辦法直接在內網得到, 隊非直接與route 內部通訊! 懂點網絡協議的人應該理解!
    但也不是說沒法, 有時,我們打開某個網站的網頁, 上面會顯示你的IP是多少, 下面就是根據這個原理來實現;------------------------------------------------------------
    你的这种思维方式就不对,一定再内网获取吗,我不可以换一种方式吗?
    我明明把贴子放在"网络与分布式"栏,
    可你非要把它移到非技术区,难怪现在DELPHI论坛这么冷清!
      

  16.   

    --------------革命还得考自己,我现在调通了!
    --------------
    高手们,我的非技术问题我自己解决了,NAT,我在2年前我就自己调试过,
    告别DELPHI版主--aiirii(ari-爱的眼睛) !非技术问题非技术问题非技术问题非技术问题非技术问题非技术问题非技术问题???????
      

  17.   

    最后给出给分理由:phoenixsharp (180):给出P2P的基本原理;
    ksaiy (20):连接是有效的,而并非某某高人说是无效的连接;除非他不在大陆就打不开该连接,只不过那两个东西我都知道,所以只给20分;而其他并非涉及P2P,所以理所当然不给分!
    ---------------------------------------不管你质疑我的个人素质也好,还是你水平高也好;
    反正现在的论坛上口水比墨迹多已经是无可非议!
    有点讨论价值的话题竟然被移到非技术区,对这些做法我无话可说!至于某某版主的素养简直让人呕心.(不是针对 ehom(?!) ,请你不要误解)
    同时请给出移贴理由.
      

  18.   

    其实这个地方是拿来交流的,大家心平气和一点点就能相互借鉴学习共内进步了.
    引因:
     楼主:我想楼主刚开始对回复的词句是直接了一点.原理上讲可以更委婉一些,也知道你的出发点是希望有实质性的回复,希望尽管解决问题.这本无可厚非.
     对于版主:我想大家都是来交流技术的,没有必要这么严肃吧.尽管版主希望是看到一个平和的气氛,
     但动不动就移贴,删除人家的回复(我就有一次被删,扣了信誉),希望 能跟出理由,以理服人,另外,私下
     觉得,正真好的论坛,管理者(版主--管理方面)应该是不可见的.权威不是什么好东西,对于CSDN来说.结果:从问一个问题搞得大家都不开心,何必?! 只打五十大板 (第三者)
      

  19.   

    我覺得與 aushqh (You Will Miss Me!)  說話是浪費時間, 但監于他這兩天發了無數了垃圾信息給我, 多次引導我回到這個貼, 我就再回復一次;
    第一, 我和 ehom(?!) 并不存在什麼大的交情, 只是就事論事, 我也不覺得我說的話, 會讓人那麼激動反應!第二, 我轉貼前, 已經發過消息讓 aushqh 給了合理的解釋理由, 不然我會處理, 他自己也引用在消息中回復給我了, 我不明白, 還老發消息問是不是我處理的, 是什麼意思?? 我不知道, 你有否向我解釋;>>>>发誓不在DELPHI版再问问题!!!!!!!!!!!!!!!!!!!!!
    >>就算你不想在 delphi 出現, 我還想問你給分的根據?? 如果沒有一個合理的答復, 這個問題我將轉
    >>到非技術, 我覺得給分不合理!!第三, aushqh老是說要成為真正的程序員, 給我點顏色看, 我知道你還不是真正的程序員, 而我是, 這是我們的差別, 很多問題, 不論是技術的, 還是非技術的, 你的理解, 也和我有很大的差距, 我只是這麼覺得; 第四, aushqh 口口聲聲說不在D版出現, 我也看過太多這樣的人, 昨天還發貼說告別XXX, 第二天又在XXX裹面大出風頭了, 所以, 我對這種話不太感冒;第五, 你說過要向CSDN投訴, 我也支持你, 但不知你行動了沒有??對于  phoenixsharp(小星星), 請自己衡量你的回答問題的質量! 
    我不想評判技術上的東西了, 因為, 我不想教給請這個問題的人任何有用的東西!我現在還是覺得我的處理沒有問題!!!
      

  20.   

    TO: aiirii(ari-爱的眼睛) 事实会证明一切!------------------------
    首先你的转贴并没有取的我意见,
    并且你的消息我并没有收到!你发的消息是在13:00多,到14:00你就给转贴了!当我登陆CSDN时我只知道被你扣分了!--------------------------------------我还怀疑你的理解能力,我说不问题就说我不在D版出现?----------------------------------------------总版主也说过此事情,并非我一人的错!
    如果所有的管理员都是这样的话我无话可说!-----------------------------------------对于你的有用东西有多少我也不想得到,
    你在论坛的回复我也看了很多,具体怎样我心里有数!不管我的水平怎样,我的目标就是超越!
    不管你怎么瞧我这虾米,我会朝着我的目标走的!
      

  21.   

    严正声明:
       所谓无数和多次引导我不知道某些是怎么计数和思维的!不要无味说一些不切实际的话!第一:我发回复短信是在贴子被转以后,而且并没有收到上叙短信,而是在昨天才发现,所以才又回复了一次!不然我也不会去问是不是 ehom(?!) 把我的贴子转掉了!
          如果要说短信里面的内容的话,大可以贴出来给大家看,有几封??
          还有人竟然说要删ID呢!第二:>>>>发誓不在DELPHI版再问问题!!!!!!!!!!!!!!!!!!!!!
    当然有我的理由:
      我发贴:一般问到底层的问题就没有解决过,而且我一问问题老是把我的信誉分减了又加,加了又减,这样的交流还有什么意思!
    (我本来不想对DELPHI做什么评论,这也许根DELPHI本身的设计有关,它底层都封装起来了,所以交流起来可能不是那么方便)
      至于某某人说说今天不在D版出现,明天又来,造成这种现象的原因完全是他本人吗?我想某些人也该思考一下了!
      在某某人没有从版主职位上下来的话,我是不会来发问的了,很确定!第三:在CSDN上讨论问题的话,人家没有义务回答是正常,但人家给分是人家的权利,正如商场上一样,不可能人家的交易额大,不可能因为第三者就取消交易吧!(就如我们的软件交易一样,人家还认为暴利呢,但他们敢说什么吗)
       这个道理很简单,况且我并没有超出CSDN给分的范围!而且我只给有点价值的观点!
    所以我觉得我的给分合理!没有什么不妥之处!
    属于正常的你情我愿,没有谁能够干涉!
    如果象这贴这样处理的话,我还要问某某人得来的专家分都符合这个标准吗?没又高分的激励哪里来的新高手!(商场上也一样)第四:学业有先后,术业有专攻!
         我们传统的文化都是这样的,况且某人用的文字还是Traditional,这个也不懂,还说不管技术非技术方面都强,嗯这我不想再说了..。  
         在当今中国的程序员中不乏将才,但是帅才少之又少,何味帅才我相信大家很清楚!
         而且现实中自认认为了不起的人我也见了不少!我也不想多加评论了....,更不要说感冒了^_^!至于技术上的交流,我还不屑和某某交流呢!