日期:2014-05-20  浏览次数:21177 次

用UDP在公网上打好洞之后怎么知自己的公网IP和端口?
NAT大家都清楚,我就不多说了。
可是我没有公网IP的服务器,这样的话我就随便往一个公网IP上发UDP包来打洞。
可是打好洞之后怎么通知道自己的公网IP和UDP端口呢?

------解决方案--------------------
如果你已经连到了具有共网地址的服务器,

服务器方面会知道你的共网 ip, 你可以在服务端的程序里返回这个值

而且服务器通过对比你本地ip和共网ip,还可以知道你是否在防火墙之后
------解决方案--------------------
想得到公网的IP地址有好多的方法..可以通过请求http查地址的哪种.也可以..另外自己弄个asp的网页.让自己的程序去请求他也可以
跟udp没有关系到
------解决方案--------------------
搂主对打洞原理理解的不太正确。打洞是指内网内的主机主动向具有公网IP的服务器发送udp报文,以实现在该服务器与该主机之间通讯的通道。这个通道只能为二者所使用,不能为其他主机或者服务器使用。
比如存在两个网络Net1,Net2,Net1中主机A,Net2主机B,还有服务器S,p2p中如果B要发消息给主机A,必须完成以下打洞过程:
首先B发送Udp消息给S,叫做在Net2上打一个方向为b-> s的洞
A也要向S发送Udp消息给S,叫做再Net1上打一个方向为a-> s的洞
那么a-s,b-s就可以通讯了
如果a-b要能通讯的话,比如b主动发送消息给a,首先b必须发送报文给s,告诉s自己要发消息给a,
s收到这样的命令后,会将a的公网ip发送给b,然后由b向a公网ip打洞 b-> a公网IP
这样才能实现p2p


如果要知道自己在某公网Ip上的公网Ip和端口号,必须查路由表
开始-运行-cmd-netstat -r就可以查了。在程序里面你可以用Process来调用