当聊天的双方都是通过代理服务上网的话,他们之间是个什么样的通信机制???
还有一种类似代理的上网方式,就是通过网关和DNS服务,这种情况下又是用的什么机制,
请高手指教!!!谢谢!!!

解决方案 »

  1.   


                           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。现在我们需要的是在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方向打洞。
      

  2.   

    呵呵,用Google更管用一点吧
    搜索 NAT、NATP
      

  3.   

    我说的客户断怎么来写,Client A发送的数据怎么来写,因为要通过代理向外发送,数据报里面肯定是很复杂的,有目标IP和代理服务器IP,比如ClientSocket.socket.sendtext(),发送的text怎么来组织,,,一直迷惑这个问题,大概的机制我也知道,,请高手指教啊
      

  4.   

    对于发送文件或视频,是两个QQ客户端其中一个作为客户端,另外一端作为服务器端机制直联的,两个QQ客户端发送信息,是通过腾讯服务器接受-〉转发机制。