我是这么做的:A、B端在各自子网分别定义个UDP socket,绑定端口9010。 登陆服务器S(向S发送一个UDP包)。S收到UDP包后得到A、B的IP地址和端口号。A的发送给B ,B的发送给A。 然后A发送UDP包给B ,B发送UDP包给A是A就能接收到了。这么实现对不对?我在两个路由(一个TPlink,一个DLink)下面放A、B端程序。TPlink的NAT 类型应该是Full Cone NAT,A->S后,B直接向A发送UDP包,A就能接收到了。
  
问题出在DLink的路由,正好设置界面有NAT状态可以查看,发现:B->S后 B端的9010就跟S端建立了一个UDP NAT转换。 但B->A后,NAT转换列表里面没有新增B--->A的NAT转换。结果:B->A,A能接收到。 A->B,B接收不到UDP包。 S->B,B是可以接收到的。
DLink路由的NAT是什么类型的? 有办法穿透吗?

解决方案 »

  1.   

    你分析下:
    端口增长是否为你设计的增长量
    是根据IP,还是IP和端口通时注意B端用户数是不是很多
      

  2.   

    我现在做测试就一个A端 一个B端,B端登录S后,我查看DLink路由里面NAT状态可以发现一个对应NAT转换,S端也能向B端发送UDP包, 但B端向A端发生UDP包后,没有新的NAT转换生成,A端向B端发生UDP,B端接收不到。我要新建个UDP socket,绑定另一个端口号,向A发生UDP包?  我UDP穿透的思路对不对的?
      

  3.   

    我现在做测试就一个A端 一个B端,B端登录S后,我查看DLink路由里面NAT状态可以发现一个对应NAT转换,S端也能向B端发送UDP包, 但B端向A端发生UDP包后,没有新的NAT转换生成,A端向B端发生UDP,B端接收不到。我要新建个UDP socket,绑定另一个端口号,向A发生UDP包?  我UDP穿透的思路对不对的?
      

  4.   

    自己顶下~~ 求指点啊,现在我也像UDP:recvfrom()一样阻塞掉了~~   最主要的是 我UDP穿透的思路对不对?我A/B端都只定义了一个UDP socket ,且绑定的端口是9010。 S端也只有一个UDP socket,绑定端口是9001
      

  5.   

    建了个小号,再顶下~~~  主要是我UDP穿透的思路对不对的?
      

  6.   

    呵呵。 UDP穿透技术 想用来做什么 木马吗?
      

  7.   

    视音频传输~~ 现在实现的功能太不自由,只能公网的两端来运行。QQ就方便很多,就是不知道QQ是怎么处理