基于C#实现的在线聊天室的桌面系统软件
资源下载地址:https://download.csdn.net/download/sheziqiong/86863237
资源下载地址:https://download.csdn.net/download/sheziqiong/86863237
目录
个人聊天室软件 1
需求分析与概要设计 1
- 项目说明 1
1.1. 项目目标: 1
1.2. 软硬件环境需求 1
1.3. 使用的关键技术: 1 - 需求分析 2
2.1. 系统用例 2
2.2. 业务流程 3 - 概要设计 3
3.1. 功能模块设计 3
3.2. 核心类图 5 - 界面设计 5
1.项目说明
1.1.项目目标:
本项目目标完成一个可以实现多个不同主题的在线聊天室的桌面应用,用户可以在不同的聊天室中交流不同的话题。用户在登录后可以选择聊天室、查看聊天室人数以及选择用户私聊等。
1.2.软硬件环境需求
软件是基于.net framework 4.7.2开发,数据库为Mysql8.0.24
1.3.使用的关键技术:
软件基于Socket编程,C/S架构风格开发。客户端通过发送指令得到服务器的返回信息。
2.需求分析
2.1.系统用例
图 1 系统用例图
(1)登录
参与者:普通用户、管理员
基本事件流:用户或者管理员在登录的时候先选择登录身份。输入账号和密码后核验其账户是否存在以及密码是否匹配,若匹配则用户登录进入用户主界面,管理员登录进入管理主界面,否则提示用户不存在或者密码错误。
(2) 创建聊天室
参与者:普通用户、管理员
基本事件流:用户和管理员在创建聊天室的时候需要标明此聊天室的主题以便于有不同兴趣爱好的用户进行交流。
(3) 选择聊天室聊天
参与者:普通用户
基本事件流:用户登录后进入主界面可以浏览各个聊天室的主题以及在线人数,然后根据用户个人的兴趣爱好选择进入聊天室。本文转载自http://www.biyezuopin.vip/onews.asp?id=16975进入聊天室用户可以在公共聊天室发消息也可以选择用户私聊。
(4) 禁言
参与者:管理员
基本事件流:管理员对个别发表引战、谩骂攻击、违法等言论的用户实施禁言以管理应用,具体禁言时间根据具体情况而定。
(2) 删除聊天室
参与者:管理员
基本事件流:部分公共聊天室的主题可能存在违法乱纪的行为以及可能存在聊天室成员公开讨论违禁话题,需要管理员对此类聊天室进行查封删除。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;namespace ChatWork.Forms
{public partial class Chat : Form{private readonly int id;//房间Idprivate string MsgHis = null;private bool IsPrivate = false;private string PrivateRemote = null;//私聊对象的IPThread thread;public Chat(string Id,string theme,string content){id = Int32.Parse(Id);InitializeComponent();Tiltle.Text = "关于 "+theme + " 的聊天";ChatInfo_Box.Text += "\n简介:\n"+content;this.Member_List.Columns.Add("IP", 180, HorizontalAlignment.Left);this.Member_List.Columns.Add("账户", 68, HorizontalAlignment.Left);}private void Chat_Load(object sender, EventArgs e){//加载历史信息List<Message> msgs = Program.clientService.GetMsg(id);foreach(var m in msgs){MsgHis += m.SendTime + "\n" + m.Sender + "说:" + m.Content + "\n";}Msg_Box.Text = MsgHis;Msg_Box.SelectionStart = Msg_Box.TextLength;Member_List.Items.Clear();//加载在线用户List<KeyValuePair<string, string>> users = Program.clientService.GetUser(id);Member_List.BeginUpdate();foreach (var user in users){ListViewItem i = new ListViewItem();i.Text = user.Key;i.SubItems.Add(user.Value);Member_List.Items.Add(i);}Member_List.EndUpdate();//信息滑到最底部Msg_Box.ScrollToCaret();CheckForIllegalCrossThreadCalls = false;//开启更新信息的线程thread = new Thread(RefreshMsg);thread.IsBackground = true;thread.Start();}private void RefreshMsg()//更新信息{while (true){Msg_Box.Text = MsgHis + Program.clientService.Msg;}}private async void Send_button_Click(object sender, EventArgs e){string Msg = MsgSend_Box.Text.Trim();MsgSend_Box.Text = null;//消息类型判断if (Msg == "") MessageBox.Show("发送信息不能为空");else if (Msg.StartsWith("文件"))//发送文件{string[] ss = Msg.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);var re= await Program.clientService.SendFile(ss[1]);if(!re)MessageBox.Show("发送失败");}else//发送正常消息{if (!IsPrivate)//公聊{if (!Program.clientService.SendMsg(Msg, id.ToString())){MessageBox.Show("您已被禁言");return;}}else Program.clientService.SendMsg(Msg, PrivateRemote); }}private async void Leave_button_Click(object sender, EventArgs e){var re=await Program.clientService.LeaveChatRoom(id);if (re){thread.Abort();this.Hide();MainForm mainForm = new MainForm();mainForm.Show();}else MessageBox.Show("请稍等");}private void File_Button_Click(object sender, EventArgs e){string file=string.Empty;OpenFileDialog dialog = new OpenFileDialog();dialog.Multiselect = false;dialog.Title = "请选择文件夹";dialog.Filter = "所有文件(*.*)|*.*";if (dialog.ShowDialog() == DialogResult.OK){file = dialog.FileName;}if (!string.IsNullOrEmpty(file)){MsgSend_Box.Text = "文件:\n"+file;}}private void Member_List_SelectedIndexChanged(object sender, EventArgs e){if(Member_List.SelectedItems.Count!=0){if (!IsPrivate){DialogResult result =MessageBox.Show("是否和该用户私聊?", "私聊确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);if (result == DialogResult.Yes){IsPrivate = true;}else IsPrivate = false;}else{DialogResult result =MessageBox.Show("是否和该用户取消私聊?", "取消私聊", MessageBoxButtons.YesNo, MessageBoxIcon.Question);if (result == DialogResult.Yes){IsPrivate = false;}else IsPrivate = true;}PrivateRemote = Member_List.SelectedItems[0].Text;}}//点击文件超链接private void Msg_Box_LinkClicked(object sender, LinkClickedEventArgs e){string path = string.Empty;FolderBrowserDialog fbd = new FolderBrowserDialog();if (fbd.ShowDialog() == DialogResult.OK){path = fbd.SelectedPath;}Program.clientService.RecvPath = path;string s = e.LinkText;Program.clientService.RequestFile(s.Substring(0,s.LastIndexOf('/'))+"D:/test/"+s.Substring(s.LastIndexOf('/')+1));}}
}
资源下载地址:https://download.csdn.net/download/sheziqiong/86863237
资源下载地址:https://download.csdn.net/download/sheziqiong/86863237
基于C#实现的在线聊天室的桌面系统软件相关推荐
- 可以发送图片文件的php聊天室,基于 Swoole 开发实时在线聊天室(十四):发送图片消息...
基于 Swoole 开发实时在线聊天室(十四):发送图片消息 由 学院君 创建于1年前, 最后更新于 1年前 版本号 #1 2055 views 0 likes 0 collects 上篇教程我们演示 ...
- 局域网socket ip_基于局域网的小型在线聊天室(C++)
linux:linux下C++ socket网络编程--即时通信系统(含源码)zhuanlan.zhihu.com knowledge2018:vmware 虚拟机三种网络模式-"桥接.N ...
- 简单的一个在线聊天室
闲着无聊写一个基于数据库写一个在线聊天室 前几天闲着没事突然想起写个小程序玩玩,就想到了写个在闲聊天室,话不多说直接开始. 1.第一当然是先写一个聊天界面啦,我写的界面是这样: 聊天页面 2.写这个程 ...
- Python在线聊天室
基于Django&Websocket实现在线聊天室 痛点 痛点解决方案 轮询 长轮询 Websocket Django配置Websocket 前端连接Websockt 痛点 服务端(后端)需要 ...
- SpringBoot搭建在线聊天室
Echat-SpringBoot 一款轻量级的基于SpringBoot + WebSocket的在线聊天室项目,在MccreeFei的聊天室基础上,将其升级为SpringBoot版本,去掉了JSP文件 ...
- 简单两步,用Java实现网络在线聊天室
Echat在线聊天室 一款轻量级的基于SpringBoot + WebSocket的在线聊天室项目,在MccreeFei的聊天室基础上,将其升级为SpringBoot版本,去掉了JSP文件,去掉了xm ...
- 基于Server-Sent Event的简单在线聊天室
一.Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览 ...
- 基于Java语言的Web在线聊天室
在线聊天室 能够实现登录,注册,聊天功能,最终效果如下图所示 注册页面 <%@ page language="java" contentType="text/htm ...
- 从头搭建一个基于 Python 的在线聊天室
本场 Chat,是基于 Python + Redis + Flask 来搭建一个简单易用的在线聊天室.完全从零开始,一步一步完成整个项目. 主要分享内容: Flask 项目结构 Python Redi ...
最新文章
- Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅!
- PHP开启session的函数,ThinkPHP中session函数详解
- JDK12下的ArrayList源码解读 与 Vector的对比
- Windows平台Android开发环境搭建几个注意点
- crash工具解析_Linux 后台开发常用调试工具
- 02-Linux Kernel(armv8-aarch64)的原子操作的底层实现
- mysql运算结果放入表中_MySQL表1新增数据,计算开始、结束日期之间所有时间,插入到表2中...
- django 传递中文_如何在Django中建立消息传递状态
- Pyinstaller打包Django项目
- 最新版spark1.1.0集群安装配置
- java 绘制动态小球_JavaScript动画实例:动感小球
- PAT 1069. 微博转发抽奖(20)-乙级
- EXCEL数据行数达上线,读取发生错误
- VS中的debug和releasse版本的区别
- 农历与公历日期转换(1900年 至 2049年)
- maven子模块之间互相引入依赖,pom文件报错
- 计算机二级mysql难度_计算机二级科目怎么选 科目难度排名
- linux 利用cat写文件名,在LINUX中如何用cat创建一个文件
- 《惢客创业日记》2018.11.22(周四)《创业时代》给我的启发
- R语言绘制图例(legend)的各种问题_详细综合解析