TCP、UDP穿透NAT

来源:百度知道 编辑:UC知道 时间:2024/06/20 16:31:13
最近用socket做了个聊天程序,该程序支持传文件,在本地局域网内测试正常使用!
问题如下:因为此程序要发布到网上,所以,出现了问题,聊天能正常聊天,我使用的是用户A←→服务器C←→用户B,这样的传送聊天信息,而传送文件使用的是A←→B,在局域网内,这样使用正常,但是放远程服务器上使用的时候问题来了,A不能用B连到C的IP与端口与对方通信,数据包被路由器干掉了(不知道我的描述对不对?)
这个问题比较棘手,网上看了帖子无数,最后终于发现了一个有代码的,但是看不懂……,不明所以,好不容易发现了一个可以下载源码的,他玛丽隔壁的,居然是个空的,就2个bat文件……
我想知道的是,不管是UDP还是TCP,怎样穿透,希望能说明下A会怎么处理,B会怎么处理,C怎么处理的傻瓜式教程。
我知道这种技术不是分能搞定的,如果你能给点帮助,没齿难忘,分先给100,如果确实对我有帮助,我会把分加到200再结贴,希望不吝赐教,谢谢!
注:请用自己的话,如果舍不得打字,就别回帖了,网上能搜的,90%我都看过了!
@slb00814 感谢你的回答,因为我不是C#程序员,也没弄过.NET,什么都不熟悉,而且好不容易找了个反复测试无bug的异步类QQ传文件,不想改其他的了,累,实在做不出来也没法。。
@mr11 理论上的东西是这样,关键是操作啊。。比如:代码咋写,写个demo也好啊。。就要打洞片段。。。555,我哭!
@HAL9000PLUS 郁闷,不是说得对不对,理论都知道,关键是实际的东西,我宁愿看代码来理解。。
算了,无答案,理论上的东西人人都知道,实际写代码却。。。现在马上离开这里了,没什么好遗憾,毕竟我不是搞这个的~

A与B如果IP相同,则用内网方案。

A与B的IP不相同的话,
A请求服务器让B给A发个打洞消息。如果能接收到B的应答,就说明通了。(在这里是通过线程,有一个最大尝试次数)

A -> 发送打洞请求给C
C -> 发送命令给B,B接到命令后
B -> 发送打洞回应消息给A,一直尝试N次
如果A能接受到B的回应,就通了。

不知道描述的对不对。

楼上说得对。就是A,C都向服务器B定时发起一个所谓“打洞”的数据包,随便什么都行,然后B维护这个地址,并向AC公布对方的地址。AC就可以通过这个地址连系了。但只是在一定时间之内,因此需要定时地(如半分钟一次)与服务器保持联系,以维护这个临时nat的存在。

但,似乎只有UDP能通过。TCP可能不行。

我记得。net的webservice的协议是通过80端口的,可以穿墙,一般的路由都是开80端口的。想想能不能利用这一点实现功能呢?只是一个想法,最近也在研究这部分内容。太多的也帮不了你,抱歉!

在百度搜 “校园x技术小组” 在最后一个板块vm专区 还不懂hi me