资源简介
本文旨在用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# TIP文件生成和拆解
- C#解析HL7消息的库135797
- C# OCR数字识别实例,采用TessnetOcr,对
- 考试管理系统 - C#源码
- asp.net C#购物车源代码
- C#实时网络流量监听源码
- C#百度地图源码
- Visual C#.2010从入门到精通配套源程序
- C# 软件版本更新
- C#屏幕软键盘源码,可以自己定制界面
- 智慧城市 智能家居 C# 源代码
- c#获取mobile手机的IMEI和IMSI
- C#实现简单QQ聊天程序
- 操作系统 模拟的 欢迎下载 C#版
- C#写的计算机性能监控程序
- 用C#实现邮件发送,有点类似于outlo
- MVC model层代码生成器 C#
- c#小型图书销售系统
- C# Socket Server Client 通讯应用 完整的服
- c# winform 自动登录 百度账户 源代码
- C#编写的16进制计算器
- C#TCP通信协议
- C# 数据表(Dataset)操作 合并 查询一
- C#语音识别系统speechsdk51,SpeechSDK51L
- 数据库备份还原工具1.0 C# 源码
-
[免费]xm
lDocument 节点遍历C# - EQ2008LEDc#开发实例
- DirectX.Capturec# winform 操作摄像头录像附
- c# 实现的最大最小距离方法对鸢尾花
- C#版保龄球记分代码
评论
共有 条评论