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

内网PC和公网server通讯的几个困惑, 求教高人 (剩余分数全部奉上了)
我搜索过很多文章了,总感觉很多人完全在那乱说,明明人家问怎么让网内PC和公网server通讯,   有人总是不负责任的乱贴一些LAN里面通讯的简单例子.

我有几个困惑:
1.   通常IM软件设置http代理就可以使用了,他们是利用UDP打洞技术来做的么?
2.   IM软件设置sock4/sock5代理也可以让网内PC和公网server通讯,   这个是UDP打洞技术么?
3.   打洞技术提到的nat是不是就是上面提到的这些代理服务器充当的角色?服务器并没有设置这些转换规则啊,难道代理服务器都默认支持这种nat方式么?
4.   C#里面用udpclient类是不是没有办法做到udp打洞?用socket呢?有人有类似代码参考么?


------解决方案--------------------
》》1. 通常IM软件设置http代理就可以使用了,他们是利用UDP打洞技术来做的么?
HTTP代理本质还是通过公网Server来转发数据包的,跟UDP打洞是两回事。

》》2. IM软件设置sock4/sock5代理也可以让网内PC和公网server通讯, 这个是UDP打洞技术么?
不是的,我们通常说的UDP打洞,其实是指穿透NAT。

》》3. 打洞技术提到的nat是不是就是上面提到的这些代理服务器充当的角色?服务器并没有设置这些转换规则啊,难道代理服务器都默认支持这种nat方式么?
呵呵,穿透NAT也需要一个公网服务器来联系的,但两个内网连接成功后(打洞成功),就不需要公网服务器了,此时两个内网的应用程序可以通过UDP直接收发数据包(P2P)。

》》4. C#里面用udpclient类是不是没有办法做到udp打洞?用socket呢?有人有类似代码参考么?
理论上只要使用UDP协议就可以打洞,但NAT也分很多种,有些NAT是不能穿透的。
------解决方案--------------------
to 楼主:
我对.net中关于winsock方面的类没有研究,所以我不知道怎样使用UdpClient类。

建议你阅读一些winsock和TCP/IP协议方面的资料。用UDP穿透NAT并不复杂,网络上的资料和代码已经非常多了。