这段时间突然想搞一些P2P方面的程序,就在网上找了一下,结果也找到了一些资料
和文章,甚至还有一个VC的源代码。我看了一下,CSDN也有人问过同样的问题,但
是也是没什么具体的代码出来,最后也就是有人贴了一些RFC1631的中文文档而已。
因为我对VC本来就不怎么懂,所有看完成程序后根本就不知道流程是什么?为什么
要这么做?还有什么可以优化的?这都是问题。当然问题还很多,也就不在这里说
了。
其实我的主要问题是,如果在VB里想使用NAT收发信息,可以直接使用WinSock控件
吗?而且如何使用NAT(虽然RFC1631的中文文档我看过,但是也没发现NAT到底怎么
用呀。也就是知道NAT是"网络地址转换",但是什么?在哪里?怎么用起来才是我最
关心的)。
还有我想了解具体的思路是什么?如:
1、客户A用WinSock控件连接服务器
2、服务器收到客户A的连接信息后,用...API分析客户Nat主机IP及映射端口
3、服务器将客户A的映射地址存储起来
4、然后客户B用WinSock控件连接服务器并向服务器请求获得客户A的地址信息。
5、服务器返回给客户B客户A的IP地址及映射端口
6、客户B通过服务器返回的客户A的Nat主机IP地址及映射端口直接与客户A进行连接上面当然是我的一些想法,但是问题在于客户A如何进行映射哪个端口的呢?能不能
在客户A访问服务器之前就自己通过程序(不是去改系统)对Nat主机的某个端口进行映
射内网主机的某个端口呢?如果行,是怎么做的?如果不行又该如何做呢?还忘各位
多多指教,最好有些代码,没有代码说一些具体的流程也好呀,不要太抽象了。因为
看了以前的帖子,很多都是贴个有关RFC1631中文说明,好像还很牛B似的,呵呵。

解决方案 »

  1.   

    楼主可以换一个思路,不要从底层编写P2P,可以通过一些现存的P2P平台的基础上进行开发,例如JXTA.
      

  2.   

    不直到楼主的想法是自己从winsock基础上开发呢还是在从JAXT或者jabber这样的平台的基础上作开发,最近在研究点这方面的东西。
      

  3.   

    谢谢楼上,我想用winsock。对于JAXT或者jabber我都没听过,所以还是搞点自己
    懂的比较好吧。除非winsock实在不能或很难搞定,一般情况下我还是会选择WinSock
    的,毕竟用了那么久了嘛,呵呵。不过你提供的JAXT和jabber我也会找一下这方面的
    资料,看看到底是什么?是不是要比Winsock简单些?顺便也长一点见识嘛,呵呵。
      

  4.   

    有必要搞清楚的问题:客户A用WinSock控件连接服务器 :
    这个只能用TCP连接吗? 如果考虑到客户端是通过代理上网的---后客户B用WinSock控件连接服务器并向服务器请求获得客户A的地址信息。
    5、服务器返回给客户B客户A的IP地址及映射端口然后A与B就联接起来(是通过TCP吧),最后,A与B 是不是就可以通过
    UDP 发送信息了呢?
      

  5.   

    WinSock控件的局限是发送一条信息后,如果没发送完整,第二条信息就要等待,难啊
    期待思路
      

  6.   

    其实p2p我已经试验成功了
    环境 1服务器固定ip
     2客户端2个客户端 都给服务器发送连接请求,这是服务器就获得他们的ip和端口了,这个ip和端口就是路由器的ip和他影射的端口   (这些在你的vc那个文档中说的那一大段,理解了就是这样,那个影射端口不用考虑
    ,系统来处理它)下面,1个客户端 请求和第2个客户端建立连接,服务器把那个客户端的ip 和端口发给请求客户端,
    请求客户端直接连接被请求客户端的ip和端口,这个会连接成功,
    这时2个客户端建立了虚拟的连接,2个就可以通讯了.
      
    注意:有条件的,这个条件就是他2个客户端上端的路由器必须支持p2p的,如果不支持,就不会连接成功
    要解决 2个客户端的路由器不支持的问题有2个方案
    1.qq的解决方案 tcp和udp结合使用,如果udp不通就走tcp
    2.这个是我自己想的,如果可能的话,自己建一个代理服务器,客户端都走这个代理服务器连接目标服务器,服务器只要和代理服务器通话就行了,这样有2个好处 1,安全性 2,能解决代理不支持udp的问题.如果2个路由器不支持udp至少它的代理是支持udp的,只要udp连接不断(他也有1个虚拟的连接),udpto通过代理一定能实现p2p
      

  7.   

    P2P 之 UDP穿透NAT的原理与实现(附源代码)
    原创:shootingstars
    参考:http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。首先先介绍一些基本概念:
        NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。
        最开始NAT是运行在路由器上的一个功能模块。
        
        最先提出的是基本的NAT,它的产生基于如下事实:一个私有网络(域)中的节点中只有很少的节点需要与外网连接(呵呵,这是在上世纪90年代中期提出的)。那么这个子网中其实只有少数的节点需要全球唯一的IP地址,其他的节点的IP地址应该是可以重用的。
        因此,基本的NAT实现的功能很简单,在子网内使用一个保留的IP子网段,这些IP对外是不可见的。子网内只有少数一些IP地址可以对应到真正全球唯一的IP地址。如果这些节点需要访问外部网络,那么基本NAT就负责将这个节点的子网内IP转化为一个全球唯一的IP然后发送出去。(基本的NAT会改变IP包中的原IP地址,但是不会改变IP包中的端口)
        关于基本的NAT可以参看RFC 1631
        
        另外一种NAT叫做NAPT,从名称上我们也可以看得出,NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。基本NAT的设备可能我们见的不多(呵呵,我没有见到过),NAPT才是我们真正讨论的主角。看下图:
                                    Server S1                         
                             18.181.0.31:1235                          
                                          |
              ^  Session 1 (A-S1)  ^      |  
              |  18.181.0.31:1235  |      |   
              v 155.99.25.11:62000 v      |    
                                          |
                                         NAT
                                     155.99.25.11
                                          |
              ^  Session 1 (A-S1)  ^      |  
              |  18.181.0.31:1235  |      |  
              v   10.0.0.1:1234    v      |  
                                          |
                                       Client A
                                    10.0.0.1:1234
        有一个私有网络10.*.*.*,Client A是其中的一台计算机,这个网络的网关(一个NAT设备)的外网IP是155.99.25.11(应该还有一个内网的IP地址,比如10.0.0.10)。如果Client A中的某个进程(这个进程创建了一个UDP Socket,这个Socket绑定1234端口)想访问外网主机18.181.0.31的1235端口,那么当数据包通过NAT时会发生什么事情呢?
        首先NAT会改变这个数据包的原IP地址,改为155.99.25.11。接着NAT会为这个传输创建一个Session(Session是一个抽象的概念,如果是TCP,也许Session是由一个SYN包开始,以一个FIN包结束。而UDP呢,以这个IP的这个端口的第一个UDP开始,结束呢,呵呵,也许是几分钟,也许是几小时,这要看具体的实现了)并且给这个Session分配一个端口,比如62000,然后改变这个数据包的源端口为62000。所以本来是(10.0.0.1:1234->18.181.0.31:1235)的数据包到了互联网上变为了(155.99.25.11:62000->18.181.0.31:1235)。
        一旦NAT创建了一个Session后,NAT会记住62000端口对应的是10.0.0.1的1234端口,以后从18.181.0.31发送到62000端口的数据会被NAT自动的转发到10.0.0.1上。(注意:这里是说18.181.0.31发送到62000端口的数据会被转发,其他的IP发送到这个端口的数据将被NAT抛弃)这样Client A就与Server S1建立以了一个连接。
      

  8.   


        呵呵,上面的基础知识可能很多人都知道了,那么下面是关键的部分了。
        看看下面的情况:
        Server S1                                     Server S2
     18.181.0.31:1235                              138.76.29.7:1235
            |                                             |
            |                                             |
            +----------------------+----------------------+
                                   |
       ^  Session 1 (A-S1)  ^      |      ^  Session 2 (A-S2)  ^
       |  18.181.0.31:1235  |      |      |  138.76.29.7:1235  |
       v 155.99.25.11:62000 v      |      v 155.99.25.11:62000 v
                                   |
                                Cone NAT
                              155.99.25.11
                                   |
       ^  Session 1 (A-S1)  ^      |      ^  Session 2 (A-S2)  ^
       |  18.181.0.31:1235  |      |      |  138.76.29.7:1235  |
       v   10.0.0.1:1234    v      |      v   10.0.0.1:1234    v
                                   |
                                Client A
                             10.0.0.1:1234
        接上面的例子,如果Client A的原来那个Socket(绑定了1234端口的那个UDP Socket)又接着向另外一个Server S2发送了一个UDP包,那么这个UDP包在通过NAT时会怎么样呢?
        这时可能会有两种情况发生,一种是NAT再次创建一个Session,并且再次为这个Session分配一个端口号(比如:62001)。另外一种是NAT再次创建一个Session,但是不会新分配一个端口号,而是用原来分配的端口号62000。前一种NAT叫做Symmetric NAT,后一种叫做Cone NAT。我们期望我们的NAT是第二种,呵呵,如果你的NAT刚好是第一种,那么很可能会有很多P2P软件失灵。(可以庆幸的是,现在绝大多数的NAT属于后者,即Cone NAT)
       
        好了,我们看到,通过NAT,子网内的计算机向外连结是很容易的(NAT相当于透明的,子网内的和外网的计算机不用知道NAT的情况)。
        但是如果外部的计算机想访问子网内的计算机就比较困难了(而这正是P2P所需要的)。
        那么我们如果想从外部发送一个数据报给内网的计算机有什么办法呢?首先,我们必须在内网的NAT上打上一个“洞”(也就是前面我们说的在NAT上建立一个Session),这个洞不能由外部来打,只能由内网内的主机来打。而且这个洞是有方向的,比如从内部某台主机(比如:192.168.0.10)向外部的某个IP(比如:219.237.60.1)发送一个UDP包,那么就在这个内网的NAT设备上打了一个方向为219.237.60.1的“洞”,(这就是称为UDP Hole Punching的技术)以后219.237.60.1就可以通过这个洞与内网的192.168.0.10联系了。(但是其他的IP不能利用这个洞)。
        
        呵呵,现在该轮到我们的正题P2P了。有了上面的理论,实现两个内网的主机通讯就差最后一步了:那就是鸡生蛋还是蛋生鸡的问题了,两边都无法主动发出连接请求,谁也不知道谁的公网地址,那我们如何来打这个洞呢?我们需要一个中间人来联系这两个内网主机。
        现在我们来看看一个P2P软件的流程,以下图为例:                       Server S (219.237.60.1)
                              |
                              |
       +----------------------+----------------------+
       |                                             |
     NAT A (外网IP:202.187.45.3)                 NAT B (外网IP:187.34.1.56)
       |   (内网IP:192.168.0.1)                      | (内网IP:192.168.0.1)
       |                                             |
    Client A  (192.168.0.20:4000)             Client B (192.168.0.10:40000)    首先,Client A登录服务器,NAT A为这次的Session分配了一个端口60000,那么Server S收到的Client A的地址是202.187.45.3:60000,这就是Client A的外网地址了。同样,Client B登录Server S,NAT B给此次Session分配的端口是40000,那么Server S收到的B的地址是187.34.1.56:40000。
        此时,Client A与Client B都可以与Server S通信了。如果Client A此时想直接发送信息给Client B,那么他可以从Server S那儿获得B的公网地址187.34.1.56:40000,是不是Client A向这个地址发送信息Client B就能收到了呢?答案是不行,因为如果这样发送信息,NAT B会将这个信息丢弃(因为这样的信息是不请自来的,为了安全,大多数NAT都会执行丢弃动作)。现在我们需要的是在NAT B上打一个方向为202.187.45.3(即Client A的外网地址)的洞,那么Client A发送到187.34.1.56:40000的信息,Client B就能收到了。这个打洞命令由谁来发呢,呵呵,当然是Server S。
        总结一下这个过程:如果Client A想向Client B发送信息,那么Client A发送命令给Server S,请求Server S命令Client B向Client A方向打洞。呵呵,是不是很绕口,不过没关系,想一想就很清楚了,何况还有源代码呢(侯老师说过:在源代码面前没有秘密 8)),然后Client A就可以通过Client B的外网地址与Client B通信了。
        
        注意:以上过程只适合于Cone NAT的情况,如果是Symmetric NAT,那么当Client B向Client A打洞的端口已经重新分配了,Client B将无法知道这个端口(如果Symmetric NAT的端口是顺序分配的,那么我们或许可以猜测这个端口号,可是由于可能导致失败的因素太多,我们不推荐这种猜测端口的方法)。
        
        下面是一个模拟P2P聊天的过程的源代码,过程很简单,P2PServer运行在一个拥有公网IP的计算机上,P2PClient运行在两个不同的NAT后(注意,如果两个客户端运行在一个NAT后,本程序很可能不能运行正常,这取决于你的NAT是否支持loopback translation,详见http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt,当然,此问题可以通过双方先尝试连接对方的内网IP来解决,但是这个代码只是为了验证原理,并没有处理这些问题),后登录的计算机可以获得先登录计算机的用户名,后登录的计算机通过send username message的格式来发送消息。如果发送成功,说明你已取得了直接与对方连接的成功。
        程序现在支持三个命令:send , getu , exit
        
        send格式:send username message
        功能:发送信息给username
        
        getu格式:getu
        功能:获得当前服务器用户列表
        
        exit格式:exit
        功能:注销与服务器的连接(服务器不会自动监测客户是否吊线)
            
        代码很短,相信很容易懂,如果有什么问题,可以给我发邮件[email protected]  或者在CSDN上发送短消息。同时,欢迎转发此文,但希望保留作者版权8-)。
        
        最后感谢CSDN网友 PiggyXP 和 Seilfer的测试帮助
      

  9.   

    楼上又来了。这些资料我有,CSDN就有人发了好几次,其他网站也有,我还找到了E文版的。
    所以就不用发了,不懂的话“UP”一下我也很感激了,如果有自己的看法,说说自己的看
    法吧。因为这些资料我也会找的。而且这些文章上的代码连接肯定用不了,但是这“代码”
    我找到了,就是我说的VC代码,但是VC...呵呵。还有 To zyg0(影子(我可以很负责任地说:我已经真的很胖了):
    ==============================================================================
    我这样试验过,我家里有多台电脑,没用路游器,是自己用主机的Windows XP共享连接上
    网,我在主机搞了一个程序,建立了两种侦听,一个是555端口的TCP/IP侦听,另一个是555
    端口的UDP侦听。
    我在子网内的一台主机用TCP和UDP向我的Internet地址分别发出TCP连接和UDP信息,但是
    在网络主机读到的远程IP和端口竟然是内网主机局域网的IP和端口,我想知道如何得到被
    NAT映射的端口及我的内网主机的Internet地址呢?
    还有,你的第二个方法估计不太可行,按你的说法就像做一个三层结构的中转程序放到共
    享连接的主机,还要有代理功能。如果用路游器就不能用了,呵呵。还有,不可能要求每
    个代理服务器都安装这种东西吧,所以我还是认为用NAT实现比较好。
    但是我认为对于Windows 2000以上的系统来说,系统都有NAT,而且当内网主机访问外部
    服务器时作为共享Internet的主机必定会自动帮你的内网主机进行端口映射,只是这个信
    息在远程服务器是如何读出来的呢?好像要分析IP包或UDP包,是不是这样?如果是,该
    怎么搞呢?
      

  10.   

    谢谢楼上几位了to zyg0(影子(我可以很负责任地说:我已经真的很胖了)
    ====================================================
    按你的说法,就是服务器必须要是固定IP的那种服务器,像我们这种动态IP的
    服务器就不行了吗?还有其他的什么方法吗?
      

  11.   

    如何建P2P的服务器(Server S)
    我想用免费的网站做这个服务器行吗?
      

  12.   

    1台机器 不再局域网内,然后用猫拨号上网,上网后就是固定ip可以做服务器了,其实udp对服务器的带宽要求很低的,你就用别的及其连接这台猫拨号上网的服务器
      

  13.   

    adsl拨号也可以,但是有的adsl拨号是局域网宽带,
      

  14.   

    ADSL上网,IP是10.0.0.2
    这个电信局域网的IP吗?
      

  15.   

    灵感出来的问题:UDP打洞
    先决条件:ClientA(10.0.0.1:1234)通过Nat A(外网IP:202.187.45.3:620000)已经和ClientB打好洞NAT B(外网IP:187.34.1.56:620001)
    问题出来:Client A还是用端口1234 发送UDP包给第三个Nat C(外网IP:202.187.45.4:88888),则Nat A的发送端口还是620000吗?
    一句话意思就是,使用同一个端口的客户机(Client A)两个外网的IP发送UDP包的时候,这台客户机(Client A)所在的Nat (即Nat A)是否也使用同一个端口(上面例子是620000)向外网不同IP发送数据包?
      

  16.   

    一句话意思就是,只用一个端口的客户机(Client A)向两个外网的IP发送UDP包的时候,这台客户机(Client A)所在的Nat (即Nat A)是否也使用同一个端口(上面例子是620000)向外网不同IP发送数据包?
      

  17.   

    RayLynn你要什么代码呀,好像整个贴子没提过有什么代码吧,你一窜出来就说要什么代码,
    你到底想什么呢,仔细看一下贴子吧,呵呵。不过还是很感谢 zyg0(影子(我可以很负责任地说:我已经真的很胖了) ,只是因为我我没
    办法测试你的说法,很是可惜,但是有机会我一定会试一试。因为我还想把贴子放放,看还
    有没有其他人搞过并成功的,听听他们的意见也好呀。所以还请见谅不能立即结贴。如果还
    有人能给个其他的可行方案,我愿意另开200分表示谢意,CSDN200分虽然不是什么好的谢礼,
    但是重在交流,还望在这方面已经验的朋友多多帮忙呀。虽然这方面我不是很有经验,但有
    些东西我也还是可以的,毕竟人总会有强项和弱项嘛。如果我力所能及,一定义不容辞。
      

  18.   

    唉,最近偶也做网管了,老实说吧,用软件方法实现的路由功能也好,防火墙也好,性能总是不理想的,还是买硬件吧,否则人家SISCO不是要倒闭了么。
    大家别拿砖拍我哦。
      

  19.   

    又来这一套,那个C#的代码一点价值也没有,如果有独立的IP,那怎么连也可以连通的NAT转换一直就没有一个好的方案,连腾讯QQ,微软MSN,电骡这类的大公司也要用服务器中转才能实现局域网to局域网,可见,要想实现没有中转的P2P不是这么容易的.我看过好多这方面的资料(以前做过这方面的程序),总结了一下可以实现P2P的几种方法方法1.
    a(局域网上网)=>中转服务器<=b(局域网上网)方法2.
    a(有动态IP地址由于是可变的,所以用起来不太方便)=>发电邮到邮件服务器<=b(局域网)收邮件,取对方IP(冰河就是这么干的)方法3.
    a(有静态IP)<=b(动态IP或局域网)
      

  20.   

    看到那么多人都在研究,并说出了自己的心得真是太激动了。希望大家能多发表一些
    自己的心得,也好让大家能共同进步嘛,呵呵。to boyzhang(张郎)(爱你爱到Windows没BUG的那天)
    ==================================================
    你的“方法2”我比较感兴趣,我想问这可以实现P2P吗?如果可以,那就意味着在内
    网中的子机必须知道自己在Internet被映射的服务端口,这可以吗?比如说内网中的
    子机建立了一个8083的UDP侦听,然后他能得知他被NAT映射在Internet的端口号吗?
    不然发去的邮件如何说明信息呢?如果可以,那么因该怎么做能,大概的也好呀,能说
    明一下吗?
      

  21.   

    p2p穿透UDP的方法,现在有一些例子,楼上的也说明了,实现难度相对低些
    p2p穿透TCP方式,需要建立TCP的SYN,ACK等,实现比较复杂,现在实现的,一般也没公开
    还有这里提到的NAT都是端口不变的方式,如果碰上端口会变化的,还要进行端口预测,就更复杂了
      

  22.   

    百度下吧软件,被我的防火墙拦截SYN+ACk包.
    那么能不能说明这个软件已经实现TCP方式的P2P
      

  23.   

    P2P去下载那个电骡P2P(VC的开元代码)研究吧
      

  24.   

    to boyzhang(张郎)(爱你爱到Windows没BUG的那天)
    ===============================================
    不好意思,那天发了个信息让你继续回答,既然你的意思是说你知道,又不
    想说,那你就别来答了。我相信即使你不回答,我总有一天也会知道的,所
    以也就不劳你大驾了。
      说白了,P2P技术只是众多技术中的小小的一个点,就算你真的懂,也不
    代表你的技术有多高,多牛B,就算我不懂也不代表我是个菜鸟,什么都不懂。
    毕竟不可能有人什么都懂的,我也只是想多了解一些技术充实自己,尽可能
    的多学。即使没你回答我也不会总是一无所知。   不知道你懂不懂P2P,如果你不懂还可以理解,只是冲一下门面嘛,没什
    么大不了的。但是如果你真的懂,又真的不想说一点自己的经验给别人,那你
    这人可真是“小人”了。就算是你公司的“商业机密”(我想这简直不可能)说
    一点经验或是说说用你的“方法2”能不能实现P2P也无伤大雅吧,搞得像是国
    家机密似的,好像你很了不起一样。试想想,如果全中国每个人都像你那样,
    一点屁大的知识或技术都一点不愿意提,不愿让人知道,呵呵,中国???...
    没书了、没老师了、没资料了,中国全是文盲了(你高兴了,你也变白痴了)。
    你现在又从和学到知识,你又怎么看得懂English,说句难听的,别人送你一台
    电脑你都不会开机呀。  上面只是我发表对 boyzhang(张郎)(爱你爱到Windows没BUG的那天) 的一
    些看法,希望这类“高手”还是少来些吧,看了气就不打一处来。  再次感谢 zyg0(影子(我可以很负责任地说:我已经真的很胖了),我应该
    找结贴就好了,本以为还会遇上一些像 zyg0 这样的有经验的高手指点迷津,
    本想多开几个帖子答谢一下,没想到却遇上了...
      哎!郁闷呀。
      

  25.   

    呵呵,小子,CSDN是你们家开的吗?嘎嘎!看来你来是太小了,想当初我搞P2P的时候可比你厚道多了哟!谁学点东西也不容易,特别是这种不太普及的东西呵呵,心气倒是挺高,说得对,这世界缺了谁地球也照样转,自己去老外的站上啃E文去吧!
    '-----------------------------------------
    小生最近研究编译器,那位达人会做词法解释机?
      

  26.   

    你能用MFC写一个Hello,World!的话,我就相信你会你所说的那些,你能把编译原理的概念和原理说明白吗?要是你能,我就当你写过编译器!(虽然有点知识的人都知道编译器不是那么好写的,也不是一般二般的人一两天能写出来的,可我还是相信)'-------------------------------
    当你还是一个入门者时,学会了打字,便会逢人便说:"我学会电脑了"可当你会过C++,Java,ASM......时,你就会说你还什么都不会......因为你知道,这个社会已经是高度分公的结构,要知道WinXP的代码行都有2亿多行,一个人就是用掉一生,也是不可能看完懂部代码的.
      

  27.   

    本来那天留了个[我就是不说 :D]是逗你玩的(那天人在外面,没事才上了一会CSDN,现在我都很少上CSDN了,一是这里已经没有人气了,二是现在事情实在太多,没空),没想到你也太没有幽默感了,还在这里说这些话,哎,我只知道,做人要厚道,越是牛人(我从没有说过自己有多牛),就越谦虚,问人问题也要有点诚意,没听过古有张良三次桥下拾鞋的故事吗?谁也没有义务一定要告诉你自己的知识,做软件本来就是一件最需要耐心的事,你连这点耐心也没有,以后怎么成高人呢?看看这个吧,对你有帮助哟!电骡软件(大型开源P2P软件)
    下面的URL是源代码(C++),非常复杂,
    我也看不全懂,不过,这个
    代码可比网上那些没有经过
    测试和实际应用的强多了http://dl1.emule.org.cn/eMule-0.45b-VeryCD0214Source.rar
      

  28.   

    首先我没说我有多行、多牛,我也没说我已经搞出了编译器,只是说明我比你早点研究
    ,这方面搞不好比你有经验而已,不是你在什么方面都有经验。虽然编译器我没有搞出
    来,起码也不会连原理都一无所知,我也读过几本书的,还不到是个文盲那么惨。你不
    用这样臭我的。再者,我成心发信息给你,“请”你继续回答问题,你既然回答“我就是不说!  :D”。
    你给谁会认为你是“开玩笑”?还有当我认为你“不会”只是瞎说的时候我也没什么,
    只是感慨说“真是白开心一场”。你确回答我“我还真不吃这一套!”,难道你以为我还
    指望你回答吗?首先声明,我在这里发贴问问题并不是向谁乞讨什么,而是在这里和大家
    研究商讨问题,没必要被你耍吧,你说回答我“我就是不说!  :D”的时候在外面,是逗
    我玩的,但当我认为你不会时你不说明你是开玩笑或是其他什么的就说:“我还真不吃这
    一套!”,这又如何解释呢?你说:“越是牛人(我从没有说过自己有多牛),就越谦虚”,你是在暗指你很谦虚很牛啰!
    呵呵,太假了吧。牛不牛我就没看出来,不过我认为“假呀!”,呵呵。还有说点你可能很在意的话,我结贴了之后你还继续发贴,可想你的气度也不怎么样。我
    这人是这样,对于朋友我可以很宽容,对于一些我印象不好的人我可没那么好的态度和耐
    心去接触。从和你发的这几个帖子可以看出,你这人有点自负,又有点假,最后还装出一
    幅老大原谅小弟的样子,还给个XXX网址想帮助我一样。说白了,前面你发的几个贴子已经
    说明你很不满了,为何还能像帮助朋友一样的给资料呢?呵呵,我想,最后是为了个人形象
    才装出一幅...样子吧?呵呵,虽然我渴望学到知识,也希望在无助的时候得到帮助,但是
    像你这样的人的帮助我还是不用了,我也没兴趣去感谢你。起码我有能力自己找资料自学。
    即使不是立刻学到,不过我坑定能学会。如果你认为你的气度及品性不想我说的那么差,你
    就别再回贴了,不然真是自打嘴巴啰。顺便说一句,我也没什么时间,我也很忙,也不想
    再和你耗了,不管你想不想,我决定将这个话题结束,从此不再关注此贴,劝你也好自为
    之吧。