两个局域网怎么样实现聊天?--------------------|                           |---------------------
      a1 □.        |                           |            .□b1局
  局        .    PA |                           |     PB   .      域      
  域  a2 □.....□--|---------------------------|--------□...□b2网
  网         .      |                           |          .       B
  A   a3 □.        |                           |            .□b3
____________________|                           |----------------------- 
    
如图:如果局域网A 中a1(通过PA代理)要与 局域网B 中b3(通过PB代理) 通信怎么样实现? 
因为实际中a1 ping b3 都 ping 不通.

解决方案 »

  1.   

    --------------------|                           |---------------------
          a1 □.        |                           |            .□b1局
      局        .    PA |   代理服务器X             |     PB   .      域      
      域  a2 □.....□--|------□-------------------|------□...□b2网
      网         .      |                           |          .       B
      A   a3 □.        |                           |            .□b3
    ____________________|                           |----------------------- 
    如果局域网A 中a1(通过PA代理)要与 局域网B 中b3(通过PB代理) 通信
    其实它们都是访问代理服务器X 通过代理服务器中转。
      

  2.   

    搂主所说的将本地ip传送到一个外部服务器去也是没有用的,因为这根本就不是你在网络上的真实IP。
        TCP/IP协议用IP来确定数据传输到网络上的某一台计算机上面,用端口来确定将数据传输到计算机运行的某一个程序上。因此要进行网络通信重要的是确定通讯目的地的IP和端口。
        网吧里面的计算机通过一台网关(网吧服务器)与外部网络相连,所有的数据都通过着台服务器传输,因此实际上有网吧内部的发出的数据包IP地址都是相同的。每台计算机的端口都通过网关进行了一次映射,比如你的QQ在本机开了4000端口,但是实际映射到网络上的可能是154321。外部的计算机要和你通讯只要和服务器的54321端口通讯就可以了,服务器会将数据包转发到内部网络。
        我的语言表达能力不太好,怕大家看不懂。举个例子吧。网吧服务器的内部IP:10.0.0.1
    另外还有两台计算机分别是10.0.0.11和10.0.0.12我们分别简称1号和2号。服务器通过ADSL与外界连接,外部ip是210.0.0.100。
        我操作1号机用本地端口4000登陆QQ服务器,此时发出的数据源IP和源端口为10.0.0.11:4000,联接的请求被送到网关,网关将这个数据包做一下记录在映射表上然后将源信息映射成210.0.0.100:54321发给腾讯服务器。腾讯服务器收到这个请求后将其源信息记录下来并和QQ号相对应起来。同样的其他的网吧里的QQ用户也用相同的方式登陆从而将自己计算机在网络上的映射IP和端口号登记到了QQ服务器上。
        打字好累,楼主一定要给我分啊……继续……
        好了,假设这时另外一个网吧里我的好友上线了。腾讯服务器立即将我的好友在腾讯服务器上登记了的映射IP端口号发给我,这时腾讯服务器也是将这些信息发往我登陆时登记的映射地址210.0.0.100:54321。很明显这些信息是发给网吧的服务器了,网吧服务器收到这个数据包以后根据先前记录下的映射表将数据转发给内部网络10.0.0.11:4000。这时我操作的1号机的QQ就收到了这条上线信息并且获得了我的好友的映射地址。同样的,我的好友也通过相同的方式获得了我在网络上的映射地址。接下来就是我和好友之间数据点对点的传输了。除非发生网络中断,数据无法直接到达我的好友才会将数据通过腾讯服务器转发。
        休息一下……楼主,一定要给分啊……喝口水……继续……
        上面我们讲的都是UDP协议的传输方式,也是QQ工作方式,当然QQ实际上比这个复杂的多,但是基本的消息传播就是这样了。
        注意一点,这里用到的是UDP而不是更可靠的TCP协议。为什么呢?
        UDP是无连接的通讯协议。而TCP是需要连接的,也就是经常说的需要三次握手,一旦连接端口就被绑定,直到连接断开才释放端口资源。假设QQ使用的是TCP而不是UDP,这时候你通过网关将本地IP端口映射到网络上并和腾讯服务器连接。但是着时候即使我的好友通过腾讯服务器得到了我的映射地址也无法和我的映射地址通讯,因为我还和腾训连着呢他不能和我进行三次握手。如果我和腾讯的连接断开了,网吧网关就立即释放了我的映射端口,映射表被删除掉了,这是如果我的好友想通过先前得到的映射地址和我连接就会发现网吧网关已经不知道数据要发给内部网络的哪一台计算机了。这就是为什么两个不同网吧的QQ用户不能互相发送文件的原因:以前的QQ文件传输是使用TCP协议的,他会提示你和你的好友不在同一防火墙后面,其实就是TCP连接照不到对方的映射地址啦。而QQ2003版文件传输使用UDP协议,于是大家就可以和不同网吧的朋友们传送文件了。
    没错的,因为网吧服务器用它的外部IP和你的映射端口和腾讯服务器通讯,腾讯服务器自然是可以从数据包中得到你的映射IP,如果用VB的winsock控件就是在dataarive事件中查询remoteIP属性。如果你装了显IP的QQ版本就可以看到你网友在网络上的映射地址和端口,从这些信息你还能看出他是在网吧还是拨号上网:如果端口是4000 4001之类的就是用拨号或者宽带(有分配固定IP的)上网。如果端口是不规则的数字那就是通过局域网关上网的了。对于前一种情况如果你看到了4001的端口基本上可以确定她还有另外一个QQ也在线。
      

  3.   

    以上引:  chewinggum(口香糖)