资源简介
本文旨在用C#面向对象的方法实现P2P(Peer To Peer)(类QQ)会话系统。本文可作为学习C# P2P通信与面向对象程序设计的用例(包括所有源码)。
一、 通信组件:System.Net.Sockets.System.Net.Sockets.UdpClient。
二、 通信原理: 利用P2P之UDP穿透Cone(锥型)NAPT原理。
三、 系统特点:
1、所有会话命令均封装成对象。
2、每个命令对象都有Send(发送)与Exec();执行方法。Send方法用于把对象(自己)发到对方,Exec()方法完成对象的功能。
3、主要命令:Login(用户登录(C->S))、OnlineList(回复当前在线用户列表(S->C))、Upline(用户上线(S->C))、Logout(用户登出(C->S))、Leaveline(用户离线(C->C))、
Chat(会话(交谈、闲聊)(C->C || C->S->C))Relay(服务器转发)(C->S)、Abort(终止会话)(C->C || C->S->C)、Shutdown(停止服务)(S->S) 等。
代码片段和文件信息
using System;
using System.Net;
using System.Threading;
using System.Windows.Forms;
using System.Threading.Tasks;
using ChatLibrary;
namespace ChatClient
{
public partial class ChatClient : Form
{
private SynchronizationContext context; //保存主线程(UI)上下文
private ChatReceiver receiver; //P2P核心客户端类
private IPEndPoint server; //服务器端点
private string title; //缓存窗口标题
private User user; //我方用户
public ChatClient()
{
InitializeComponent();
context = SynchronizationContext.Current;
}
private void ChatClient_Load(object sender EventArgs e)
{
tbUser.Enabled = true;
tbServer.Enabled = tbUser.Enabled;
tbPort.Enabled = tbUser.Enabled;
btnLogin.Enabled = tbUser.Enabled;
btnLogout.Enabled = !btnLogin.Enabled;
title = Text;
tlState.Text = “Ready.“;
}
public void Calling(object sender SessionEventArgs e) //呼叫发起事件处理程序
{
int index = lbUsers.Items.IndexOf(e.messenger.user);
if (index > -1)
{
ChatForm form = (ChatForm)((Friend)lbUsers.Items[index]).form;
if (form == null || form.IsDisposed)
{
form = new ChatForm(receiver user e.messenger.user false);
((Friend)lbUsers.Items[index]).form = form;
}
context.Post((state) => { form.tbReceive.AppendText(e.messenger.message + “\r\n“); form.Show(); } null); //刷新窗口及其控件必须用主(UI)线程
/*
this.Invoke(new Action(() =>
{
form.tbReceive.AppendText(e.messenger.message + “\r\n“);
form.Show();
}));
*/
}
}
private ChatForm SessionForm(SessionEventArgs e)
{
int index = lbUsers.Items.IndexOf(e.messenger.user);
if (index > -1)
{
ChatForm form = (ChatForm)((Friend)lbUsers.Items[index]).form;
if (form == null || form.IsDisposed)
{
form = new ChatForm(receiver user e.messenger.user false);
((Friend)lbUsers.Items[index]).form = form;
}
this.Invoke(new Action(() =>
{
form.tbReceive.AppendText(e.messenger.message + “\r\n“);
}));
return form;
}
return null;
}
public void CallReply(object sender SessionEventArgs e) //呼叫回复事件处理程序
{
SessionForm(e);
}
public void TypeNotify(object sender TypeNotifyEventArgs e) //类型通知事件处理程序
{
ChatForm form = SessionForm(new SessionEventArgs(e.messenger));
if (form != null)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 189 2015-05-19 10:11 P2P\ChatClient\App.config
文件 26112 2015-06-02 23:20 P2P\ChatClient\bin\Debug\ChatClient.exe
文件 189 2015-05-19 10:11 P2P\ChatClient\bin\Debug\ChatClient.exe.config
文件 38400 2015-06-02 23:20 P2P\ChatClient\bin\Debug\ChatClient.pdb
文件 23168 2015-06-02 20:30 P2P\ChatClient\bin\Debug\ChatClient.vshost.exe
文件 189 2015-05-19 10:11 P2P\ChatClient\bin\Debug\ChatClient.vshost.exe.config
文件 490 2013-03-18 17:00 P2P\ChatClient\bin\Debug\ChatClient.vshost.exe.manifest
文件 23552 2015-06-02 23:20 P2P\ChatClient\bin\Debug\ChatLibrary.dll
文件 62976 2015-06-02 23:20 P2P\ChatClient\bin\Debug\ChatLibrary.pdb
文件 5120 2015-06-02 23:20 P2P\ChatClient\bin\Debug\Win32API.dll
文件 13824 2015-06-02 23:20 P2P\ChatClient\bin\Debug\Win32API.pdb
文件 6742 2015-06-02 21:41 P2P\ChatClient\ChatClient.cs
文件 4438 2015-05-28 08:24 P2P\ChatClient\ChatClient.csproj
文件 9232 2015-05-30 16:48 P2P\ChatClient\ChatClient.Designer.cs
文件 11185 2015-05-30 16:48 P2P\ChatClient\ChatClient.resx
文件 2588 2015-06-02 22:44 P2P\ChatClient\ChatForm.cs
文件 6320 2015-06-02 09:54 P2P\ChatClient\ChatForm.Designer.cs
文件 7638 2015-06-02 09:54 P2P\ChatClient\ChatForm.resx
文件 3922 2015-06-02 23:20 P2P\ChatClient\obj\Debug\ChatClient.ChatClient.resources
文件 1332 2015-06-02 23:20 P2P\ChatClient\obj\Debug\ChatClient.ChatForm.resources
文件 3151 2015-06-02 23:20 P2P\ChatClient\obj\Debug\ChatClient.csproj.FileListAbsolute.txt
文件 1043 2015-06-02 23:20 P2P\ChatClient\obj\Debug\ChatClient.csproj.GenerateResource.Cache
文件 10518 2015-06-02 23:20 P2P\ChatClient\obj\Debug\ChatClient.csprojResolveAssemblyReference.cache
文件 26112 2015-06-02 23:20 P2P\ChatClient\obj\Debug\ChatClient.exe
文件 38400 2015-06-02 23:20 P2P\ChatClient\obj\Debug\ChatClient.pdb
文件 180 2015-06-02 23:20 P2P\ChatClient\obj\Debug\ChatClient.Properties.Resources.resources
文件 1465 2015-05-20 21:57 P2P\ChatClient\obj\Debug\DesignTimeResolveAssemblyReferences.cache
文件 7259 2015-05-28 08:23 P2P\ChatClient\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache
文件 0 2015-05-19 10:11 P2P\ChatClient\obj\Debug\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
文件 0 2015-05-19 10:11 P2P\ChatClient\obj\Debug\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
............此处省略153个文件信息
- 上一篇:曲线拟合&&线性回归C#)
- 下一篇:汉诺塔动态演示程序C#完整项目
相关资源
- C# 调用win32 api函数-user32.dll详细说明
- C# 调用BarTender打印条码DEMO
- 大型比赛竞赛抽签系统 可打印 c# vs
- C#编写的Gerber查看器
- lua C# .Net4.0 vs2010 LuaInterface
- asp.net实现qq登陆
- C#十六进制编辑器
- 明华URF-35H读卡器 C#读写源码 为大家
- C#文件流读取CSV文件
- c#读写PDF文件sql
- C# winform Socket大文件传输
- c#车牌识别系统附30张测试图片
- 《C#面向对象程序设计》源代码(CS)
- 金旭亮《C#面向对象程序设计》教案
- 试题库管理系统毕业论文(C#)源程序
- 学校网站原代码(C#.NET)
- C#-数据库操作技术-员工管理系统
- c#web开发入门经典
- C#与Matlab混合编程的几种方式
- c# 开发与 mysql数据库实现的增删改查
- C#异步操作 异步查询数据库 异步处理
- Basler相机通过IO触发源码
- [源代码] 《领域驱动设计 (C# 2008 实
- 松下PLC与C#通讯串口调试入门教程.z
- USB 继电器控制器 LCUS-1 保证能用 c#
- C# AES加密解密小工具
- C#圆形按钮,非常漂亮动态~~
- [精]C#仿QQ右下角弹出提示框()
- C#进程间通信-共享内存代码
- 有史以来最简单的三层(C#)
评论
共有 条评论