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

[原创]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)



------解决方案--------------------
沙发?
------解决方案--------------------
广告?
------解决方案--------------------
高级!这个有啥用?代理?病毒?肉鸡?
------解决方案--------------------
这是一种变相的论坛宣传!呵呵
------解决方案--------------------
看来论坛里的好东西不少嘛!呵呵去注册一个
------解决方案--------------------
探讨
楼上朋友,请您换一个角度思考问题.

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

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