首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

[原创]C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码,该怎么处理

2012-01-14 
[原创]C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码关于UDP穿越NAT相关文章英文文献: Peer-to-Peer Com

[原创]C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码
关于UDP穿越NAT相关文章

英文文献: Peer-to-Peer Communication Across Network Address Translators(I) 
中文翻译: UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)

C++实现的源代码:(c++)TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞
本论坛搜集: 关于C#TcpListener监听WAN IP实现QQ程序收集资料
一个简单说明: UDP打洞(UDP Hole Punching)原理

--------------------------------------------

C#实现UDP穿越NAT程序运行效果图



(图一)运行在公网上的服务器程序,用于转发打洞消息.


(图二)运行在公网上的测试客户端程序A


(图三)运行在NAT网络上的测试客户端程序B


(图四) UDP打洞过程状态图


--------------------------------------------

***阅读下面代码前请先了解UDP穿越NAT原理***


1.服务器主窗体源代码

public partial class frmServer : Form
{
  private Server _server;
   
  public frmServer()
  {
  InitializeComponent();
  }
   
  private void button1_Click(object sender, EventArgs e)
  {
  _server = new Server();
  _server.OnWriteLog += new WriteLogHandle(server_OnWriteLog);
  _server.OnUserChanged += new UserChangedHandle(OnUserChanged);
  try
  {
  _server.Start();
  }
  catch (Exception ex)
  {
  MessageBox.Show(ex.Message);
  }
  }
   
  //刷新用户列表 
  private void OnUserChanged(UserCollection users)
  {
  listBox2.DisplayMember = "FullName";
  listBox2.DataSource = null;
  listBox2.DataSource = users;
  }
   
  //显示跟踪消息 
  public void server_OnWriteLog(string msg)
  {
  listBox1.Items.Add(msg);
  listBox1.SelectedIndex = listBox1.Items.Count - 1;
  }
   
  private void button2_Click(object sender, EventArgs e)
  {
  Application.Exit();
  }
   
  private void frmServer_FormClosing(object sender, FormClosingEventArgs e)
  {
  if (_server != null)
  _server.Stop();
  }
   
  private void button3_Click(object sender, EventArgs e)
  {
  //发送消息给所有在线用户 
  P2P_TalkMessage msg = new P2P_TalkMessage(textBox1.Text);
  foreach (object o in listBox2.Items)
  {
  User user = o as User;
  _server.SendMessage(msg, user.NetPoint);
  }
  }
   
  private void button6_Click(object sender, EventArgs e)
  {
  listBox1.Items.Clear();
  }
}
如转载请注明本文来自易学网http://www.vjsdn.com/

由于发帖长度限制。。。删掉源代码....

[原创]C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码(2)



[解决办法]
沙发?
[解决办法]
广告?
[解决办法]
高级!这个有啥用?代理?病毒?肉鸡?
[解决办法]
这是一种变相的论坛宣传!呵呵
[解决办法]
看来论坛里的好东西不少嘛!呵呵去注册一个
[解决办法]

探讨
楼上朋友,请您换一个角度思考问题.

这篇文章能为您带来帮助吗?

------解决方案--------------------


回3楼,非常有用吧,做点坏事、防止做坏事,自建vpn通道等等,向qq就用到这种技术,可以穿越防火墙,当然大部分人不用,但这方面的技术一向只有极少数人知道,是真正牛叉的技术,其它地方基本看不到这样的源码,也许你有一天就会用到。
[解决办法]
接分
[解决办法]
你能不能提供个打洞用的公网服务器端。
[解决办法]
外网的点对点通信嘛,,,,,这有什么
[解决办法]
mark
[解决办法]
涉及到了比较复杂的网络知识。
[解决办法]
学习一下。
[解决办法]
技术贴要顶

[解决办法]
顶顶更健康
[解决办法]
大家顶才是真的顶
[解决办法]
代码不全啊.

[解决办法]
mark
[解决办法]
hao
[解决办法]
好,up
[解决办法]
图片好像不显示了。
[解决办法]
UP
[解决办法]
不错,支持,虽然暂时用不上。
[解决办法]
关注中......
[解决办法]
mark。
强力贴
[解决办法]
值得关注。。

打洞
[解决办法]
挺好.如果能做到STUN类似的功能就更好了.可以加上判断内网类型.
[解决办法]
up
[解决办法]
很好,仔细看看先
[解决办法]
关注中

[解决办法]
你的网站是不是挂了。都打不开
[解决办法]
收藏了
[解决办法]
打不开链接,看不到图片
[解决办法]
认不得哦!
[解决办法]
说这个技术简单的人应该是不怎么懂网络编程的人
TCP或UDP打洞其实是一件挺有技术含量的事,明白其中的原理能让你学到好多东西,呵呵!

[解决办法]
一直不相信TCP也能打洞

看看再说
[解决办法]
处理网页时发生异常! 

浪费感情
[解决办法]
支持,可是源代码网页打不开
[解决办法]
关注!

------解决方案--------------------


收藏了,学习一下!
[解决办法]

探讨
说这个技术简单的人应该是不怎么懂网络编程的人
TCP或UDP打洞其实是一件挺有技术含量的事,明白其中的原理能让你学到好多东西,呵呵!


[解决办法]
fuck!~!~!~!~
[解决办法]
价值数万的SAP顾问培训各大模块视频即将陆续发布
http://bbs.ibeifeng.com/read.php?tid=26740&u=18936
[解决办法]
源码链接地址好像挂了
[解决办法]
好!支持!
[解决办法]
看不到图耶,郁闷中。。。。
[解决办法]
牛,虽然不怎么明白
[解决办法]
很不错~支持
不过图全部挂掉了!
这不是外网的点对点,是内网的点对点,所以需要打洞,比较麻烦,需要服务器中转,发一个打洞包来打洞~~学习了!
[解决办法]
其实明白原理才是重要的,代码不难写。我拿C++的源码也试过,都是半成品,不能100%打洞,至少我公司的NAT就无法通过UDP穿透。所以UDP穿越NAT并不是绝对的,如果要用它,必须保证代码中有备用方案,可以同时实现服务器中转,至少QQ就是这样的,同时实现了UDP点对点连接和UDP服务器中转。
[解决办法]
对称性和非对称打洞方式不同的 挺烦
[解决办法]
鍵接地址給我帶去了一個不知名的地方,樓豬,到底源碼在哪??
[解决办法]
这东西没搞过,帮顶
[解决办法]
哥哥 打不开网页
404错误
[解决办法]
帮顶
[解决办法]
很不错哦
[解决办法]
 

嗯,此贴如果能详细谈谈主要的实现过程或实践中应用到的原理,还是很有学习价值的。。

TCP能打洞 没实践过。。

UDP穿越NAT 没完全成功过。。。

望高手继续跟帖!!。。。Mark...
[解决办法]
帮顶,论坛也常去
[解决办法]
看看~
[解决办法]
探讨
嗯,此贴如果能详细谈谈主要的实现过程或实践中应用到的原理,还是很有学习价值的。。

TCP能打洞 没实践过。。

UDP穿越NAT 没完全成功过。。。

望高手继续跟帖!!。。。Mark...

[解决办法]
.
[解决办法]
长见识了,呵呵
[解决办法]
感觉整理得比较乱,另外双方在同一个局域网,而nat又不支持“自环”的情况怎么处理(主要是在不同的客户端在不同的nat下,但存在相同的私网ip和端口这种情况)
[解决办法]
帮顶
[解决办法]
good
[解决办法]
呵呵,我这个小鸟来,看了看,哎,有些高深,学习下!
[解决办法]
学习怎么用
哈哈
[解决办法]
顶顶更健康
------解决方案--------------------


看不懂牛人牛帖牛技術

還要學習的還真夠多啊
[解决办法]
重要是原理,是不是可以参考一下PASV模式的FTP
[解决办法]
好资源,谢谢楼主的分享!
[解决办法]
所有的NAT都能穿越吗?
[解决办法]
mark+up
[解决办法]
mark
[解决办法]
本来不想mark的

想一想还是mark了吧。。。
[解决办法]
顶 论坛的好东西不少
[解决办法]
赚分
[解决办法]
赚分
[解决办法]
jf
[解决办法]
不错的东西
[解决办法]
学习中
[解决办法]
不错

[解决办法]
哇,狂顶啊,我这一个月也在整在玩意啊,早点发出来就好了。
[解决办法]
不对劲,净是别人的东西。
[解决办法]
不过也不容易,有需要的可以查看一下。
[解决办法]
圆椎与对称的4种组合都能测试过?
[解决办法]
收藏
[解决办法]
很好 好强大!!正研究这个啊
[解决办法]
谢谢分享,学习

热点排行