none
C# UDP NAT点对点穿透 RRS feed

  • 问题

  • 我的思路是,客户端A和客户端B要实现点对点通讯,首先A给服务端和B对应的公网IP地址发送测试包,按理论来说A直接网B的公网IP地址发送数据包,是会被B的路由器丢弃的,但是在A的路由器上就有有一条指向B的记录,这样以来B往A发送数据包的时候就不会被A的路由器丢弃,这样以后B收到来自服务端的消息后,往A对应的公网IP地址发送测试包,但是我在实际写代码的过程中,代码完成后,测试的时候,发现完全没有办法穿透,A和B两个客户端都在不同内网当中,服务端是处于外网的,那位大侠帮帮小弟,小弟不胜感激,在线等,跪求,小弟的联系方式QQ:283637883,电话:13989488973,邮箱:zhao283637883@163.com。
    2012年8月27日 0:48

答案

  • 我觉得你的思路本来就是有问题:

    “首先A给服务端和B对应的公网IP地址发送测试包,按理论来说A直接网B的公网IP地址发送数据包,是会被B的路由器丢弃的,但是在A的路由器上就有有一条指向B的记录,这样以来B往A发送数据包的时候就不会被A的路由器丢弃,”

    1. A 的路由器上没有理由保存指向 B 的记录

    2. 即使保存了, B 往 A 发送数据的时候照样被路由器丢掉

    3. 即使不被路由器丢掉。。试想一下这个情况: A 局域网里面有 6 台机曾经向 B 路由器发过数据包,它们的记录都被保存下来了; B 局域网里面有一台机回发了一个数据包:

              A 路由器:“好纠结哦。。这个数据包究竟给六台机里面的哪台好呢。。。要不干脆丢骰子好了。。”

    或者你可以试试做端口映射。。可能会简单一些。。


    学习学习....

    2012年9月3日 3:51

全部回复

  • 点对点通讯肯定要两边的IP啊 只有公网IP肯定不行啊 有了两边的IP 直接用socket不就可以了吗?


    Ghost,
    Call me ghost for short, Thanks
    To get the better answer, it should be a better question.

    2012年8月27日 15:13
  • 没有成功!
    2012年8月29日 0:36
  • 我觉得你的思路本来就是有问题:

    “首先A给服务端和B对应的公网IP地址发送测试包,按理论来说A直接网B的公网IP地址发送数据包,是会被B的路由器丢弃的,但是在A的路由器上就有有一条指向B的记录,这样以来B往A发送数据包的时候就不会被A的路由器丢弃,”

    1. A 的路由器上没有理由保存指向 B 的记录

    2. 即使保存了, B 往 A 发送数据的时候照样被路由器丢掉

    3. 即使不被路由器丢掉。。试想一下这个情况: A 局域网里面有 6 台机曾经向 B 路由器发过数据包,它们的记录都被保存下来了; B 局域网里面有一台机回发了一个数据包:

              A 路由器:“好纠结哦。。这个数据包究竟给六台机里面的哪台好呢。。。要不干脆丢骰子好了。。”

    或者你可以试试做端口映射。。可能会简单一些。。


    学习学习....

    2012年9月3日 3:51