• 大小: 317KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-12
  • 语言: C#
  • 标签: QQ  P2P  C#  

资源简介

本文旨在用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个文件信息

评论

共有 条评论