[原创]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)
------解决方案-------------------- 沙发?
------解决方案-------------------- 广告?
------解决方案-------------------- 高级!这个有啥用?代理?病毒?肉鸡?
------解决方案-------------------- 这是一种变相的论坛宣传!呵呵
------解决方案-------------------- 看来论坛里的好东西不少嘛!呵呵去注册一个
------解决方案-------------------- 探讨 楼上朋友,请您换一个角度思考问题. 这篇文章能为您带来帮助吗?
------解决方案--------------------