外部的QQ是如何实现与局域网内QQ的互相通讯的??? (100分)

  • 主题发起人 主题发起人 snow2008
  • 开始时间 开始时间
S

snow2008

Unregistered / Unconfirmed
GUEST, unregistred user!
我们都知道用delphi可以用UDP作出,聊天通讯程序,相信QQ也是用这种方法。
但QQ是如何解决,外部QQ 与 局域网内QQ通讯的,因局域网对外可能用网关或代理的形式,那么外QQ是如何将信息通过网关传给局域网内的QQ 呢?有源码吗?
我们都知道局域对外的IP,在网关那或代理服务器机器上。
 
我遇到同样的问题,但是我按照一些人的经验编程不能成功通信。下面是999roseto347朋友所做的测试,听说他可以成功通信。
交流一下吧,或者我可以帮你做一下测试。QQ:13172724

Client A 的登录:
Client A 向Server S登记自己的公网IP及端口
Server S 向Client A 发送Client A 所有已上线的好友的公网IP及端口
Server S 向Client A 已上线的好友发送Client A 的公网IP及端口

Client B 的登录:
Client B 向Server S登记自己的公网IP及端口
Server S 向Client B 发送Client B 所有已上线的好友的公网IP及端口
Server S 向需与Client B 已上线的好友发送Client B 的公网IP及端口

现在Client A和Client B都已经知道对方的公网IP和端口了
现假设Client A发起与Client B通讯
Client A要求Server S向Client B发出Client A需要跟它(Client B)通讯的通知

(第一次连接测试:连接失败)
Client A向Client B发出连接包 导致NAT A记录了Client B信息
Client B向Client A发出连接包 导致NAT B记录了Client A信息

(第二次连接测试:)
Client A向Client B发出连接包此时NAT B已经记录了Client A信息,连接成功
Client B向Client A发出连接包此时NAT A已经记录了Client B信息,连接成功

 
我在我的局域网中测试不成功。
我的上网方式:通过局域网的另外一台电脑的共享连接上网。
服务器运行与另外一台在外网的电脑之上。
客户端可以成功连接服务器,服务器也能成功连接客户端,客户端能成功获得目标客户端的信息(网关的ip,临时的端口)。但是两个客户端互相发送信息却失败。
 
好像没人关注啊。
有朋友给我来email说,这样的方式只能用于 Full Cone NAT
我想知道,怎么去获得我的NAT是属于那类呢?

Full Cone NAT:
在给一个新的外部会话建立了一个公共/私有的端口绑定后,一个full cone NAT就可以通过这个公共端口从公网上的任何外部端点接收数据通讯了。Full cone NAT也常常叫做"混合"NAT。
 
我不知道什么是NAT,但是我们也可以用死办法呀。
1、首先我们知道如果你的电脑通过代理上网,那你就一定能够访问公网中的电脑是不是呀(只是公网中的电脑不能访问你而已)
2、既然你能够访问公网中的电脑,那你在发送信息的时候可以向公网中的电脑“写入“信息,然后通过定时扫描的方式去访问公网电脑,看看,你是否有新的别人发给你的信息。
方法比较笨哦。不好意思了。
 
楼主没有做任何测试么?
为什么不加入讨论呢。
今天,在csdn那边,一个叫“九天”的朋友说了一下NAT的一些工作方式,我转一下。

原文作者:九天

现在绝大部分的NAT应用方式都是Symmetric Cone方式,在这种NAT应用方式下,当从NAT内部发送报文到公网时,此时NAT上实际记录的映射关系如下:内部IP1 +内部Port1 +NAT外口IP2 +NAT外口Port2 +外部的IP3 + 外部的Port3,因为这里记录了外部的IP3和外部的Port3,所以只有从外部IP3和外部Port3返回的数据包才能够顺利通过NAT返回。
如果把NAT配置成Full Cone方式的话,那么在NAT上实际记录的映射关系如下:内部IP1 +内部Port1 +NAT外口IP2 +NAT外口Port2 ,就没有了外部IP3和Port3的记录,所以外部任何IP和端口发往 NAT外口IP2的Port2的报文都可以到达内部主机的IP1的Port1。
一般的NAT的应用方式都是这两种,还有一种Partial/Restricted Cone方式,基本上很少用到。
 

Similar threads

回复
0
查看
848
不得闲
回复
0
查看
978
不得闲
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部