c# P2P穿透UDP/TCP问题!!

a939501672 2011-09-27 05:53:37
相信很多人都看过P2P穿透UDP/TCP原理!但真正能实现的人不知道有多少!
我初学,没看懂,所以想问几个问题,希望有人能够解答!我希望有代码!原理可能都懂,但实现才是问题!
一:客户端登陆,服务器就记录下该客户端的两个endpoints,前一个看作是客户端的内网ip和端口,把后一个 endpoint看作是客户端的内网ip和端口经过NAT转换后的公网ip和端口。想问的就是服务器端是如何获取到这两个endpoints的?特别前一个?假设客服端都是内网的!
二:UDP打洞客户端是不是不需要监听?只要数据包中有客户端的地址就行是吗?(对UDP的数据包不是很了解)
三:TCP打洞时,客户端A和B使用连接S的端口异步地发起向对方的公网、内网 endpoint的TCP连接,同时监听各自的本地TCP端口是否有外部的连接联入。发起向对方的公网、内网 endpoint的TCP连接是要连接两次吗?还有就是客户端监听的端口应该是哪个?内网的还是公网的?还是需要两个监听?
暂时就这些问题!其他问题还在发现中!!!!
...全文
364 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jy251 2011-09-27
  • 打赏
  • 举报
回复
P2P的资料网上一堆。。。。你可以多看几个不同的,好好思考。
不要纠结于表面上socket通讯几次的问题,说白了,P2P的打洞就是穿透NAT,而NAT的知识是网络方面的知识,你可以去查查cnna的书,推荐cnna的书是因为这本书是网络知识入门的书,并且网上不少pdf的,一看就懂。
原理就是网上说过很多次的,首先有个前提,两个需要P2P的client都能连接到WLAN的server上。其次server要记录这两台机器的公网IP。
在P2P开始的时候,A向服务器发送一个数据,意思说我要跟B通讯,这个时候服务器告诉B:A要跟你通讯。B就会从服务器端获取到A的公网IP,给A发送一个UDP,你别管这个UDP能否发送到,这个时候NAT中九有一条通讯记录,B给A发送过数据,那么NAT种这条路就是通的了。B发送UDP之后告诉服务器,我nat的路已经通了,服务器马上告诉A:到B得nat已经穿透了,B的IP是多少多少。A连接B,使用TCP。
整个过程就这样。
_lee_chong 2011-09-27
  • 打赏
  • 举报
回复
mark
chichenzhe 2011-09-27
  • 打赏
  • 举报
回复
这有资料:
http://dj9812.blog.163.com/blog/static/1664369200861010330472/

你问的3个问题都是错的。问题都错了所以没办法回答。

p2p本身就不存在监听,而只存在‘洞’。打洞就是打通外部,内部还打个毛,直接都知道内网IP的唯一地址了。

而且 不要把你现有的语言级socket的知识代入到p2p中来,会建立不好的主观思维,不利于理解。
因为语言级socket都是在讨论网卡的这一端,API封装再附加个framework封装后的数据
而p2p讲的是 穿透路由器 穿透NAT之类的东西
  • 打赏
  • 举报
回复
既然你说“原理都懂”,那么我想还是先讨论清楚你所懂得原理,如果有明显荒谬的地方别人一点一点给你指出来,这样比较好将来过渡到实现。
  • 打赏
  • 举报
回复
[Quote=引用楼主 a939501672 的回复:]
一:客户端登陆,服务器就记录下该客户端的两个endpoints,前一个看作是客户端的内网ip和端口,把后一个 endpoint看作是客户端的内网ip和端口经过NAT转换后的公网ip和端口。想问的就是服务器端是如何获取到这两个endpoints的?特别前一个?假设客服端都是内网的!
[/Quote]

哪来的?想象?给出你的出处,或者你测试的根据。
  • 打赏
  • 举报
回复
求穿透杀代码
  • 打赏
  • 举报
回复
顶顶顶,我也想知道

110,569

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧