日期:2014-05-17  浏览次数:21089 次

nat打洞
老板终于让我做打洞了
我从网上找了个demo看不懂啊
为什么
udpClient.Send(公网地址);
udpClient.Send(内网地址);
就通了呢???
谁帮忙说几句

------解决方案--------------------
A B要连接到S,肯定首先A B双方都会在本地创建一个socket, 
去连接S上的socket。创建一个socket必然会绑定一个本地端口(就算应用程序里面没写 
端口,实际上也是绑定了的,至少java确实如此),假设为8888,这样A和B才分别建立了到 
S的通信信道。接下来就需要打洞了,打洞则需要A和B分别发送数据包到对方的公网IP。但是 
问题就在这里:因为NAT设备是根据端口号来确定session,如果是UDP的socket,A B可以 
分别再创建socket,然后将socket绑定到8888,这样打洞就成功了。
------解决方案--------------------

我猜测,
udpClient.Send(内网地址); 连到的是一台服务器

udpClient.Send(公网地址); 从 Internet 上绕了一圈,仍然连到了同一台服务器

问题描述不够清楚,只是猜测,不承担任何责任,转帖过500与本人无关
------解决方案--------------------
A向B的公网IP发送一个数据包,则NAT-A能接收来自NAT-B的数据包 
并转发给A了(即B现在能访问A了);再由S命令B向A的公网IP发送一个数据包,则 
NAT-B能接收来自NAT-A的数据包并转发给B了(即A现在能访问B了)。 
------解决方案--------------------
引用:
Quote: 引用:

demo:http://www.cnblogs.com/yrh2847189/archive/2007/06/20/790013.html
VB的啊

vb.net 和c# 差不多、