关于p2p软件的穿墙问题

马上上手一个p2p的软件项目,因为没什么经验,有个问题想不明白:
如果两个终端都在内网环境,可以实现点到点的直连么?可以的话什么原理?
我理解的socket的原理,总要要有一方来监听另一方的连接请求。但如果这个监听方本身就在内网,如何把自己的socket通知到对方(或者p2p服务器)呢?

看一下这篇文章:http://www.brynosaurus.com/pub/net/p2pnat/
这是篇比较详细的介绍UDP hole punching的文章。

不可以,需要外网有一个服务器,因为没办法主动连内网。
即便是打洞,也是两边内网各自先连接服务器,然后服务器再让两边连接。

通过公网服务器,双方都连接到服务器,通过服务器交换各自的ip端口等信息,然后再建立连接,这样可以做到NAT穿透。