两年前的一个设计,找资料时扒了出来,打开看了一下源码,那个时候的设计真是无框架无模式的设计,但对像QQ这样的聊天软件无疑是一个了解和值得参考的实例,所以大牛请绕过,在此跟大家分享一下,希望对正在学习Socket的童鞋们有点帮助,欢迎大家来拍砖,上图:

简介:

1.软件采用C/S模式,服务器基于.NET控制台应用程序,客户端基于.NET WPF,数据库采用SQL Server

2.在通信上采用TCP协议进行信息传递,以服务器转发方式通信,用户注册及密码管理基于B/S(ASP.NET)

3.主要完成了用户注册、用户密码修改、添加好友、删除好友;文字信息转发(支持字体)、抖动窗体、发送图片(支持GIF,但有严重问题)

服务器流程图:                                            客户端流程图:

实现:

1.发送文字

采用服务器转发方式发送,首先把消息通过相应的协议包装发送到服务器端,再由服务器端转发到指定的客户端,协议如下:

接收号码 字体消息头#Font 字体样式(包括颜色,大小,样式等等) 消息内容

服务器端接收到后按好友号码查找服务器端用户列表(如图服务器工作流程)获取Socket实例如果此好友在线就将信息发送过去

接收方接收到信息以后拆分数据,设置字体,显示消息内容。

2.发送图片

此模式有严重的问题,由于工作时间一直没有对其更新过,如果大家有兴趣可以自行修改,最好不要使用服务器转发模式,而是直接对客户端建立P2P连接。

也是采用服务器转发方式(我知道有过经验的人看到以此方式发送图片一定要拍我了),协议如下:

接收号码 图片消息头#PIC 图片尺寸

如何实现在此就不讲了,就是一鸡肋。

3.发送拌动窗体

抖动窗体实现很简单,按一定规律改变窗体的位置即可,协议如下:

消息头 接收号码

服务器接收到此消息以后获取消息头,查找用户列表获取Socket实例,如果此好友在线就将信息发送过去

接收端接到此消息,即执行窗体抖动操作,代码如下:

        /// <summary>/// 执行抖动窗体/// </summary>/// <param name="talkWindow"></param>public static void ShakeWindow(Win_Talking talkWindow){if (talkWindow.WindowState == WindowState.Minimized){talkWindow.WindowState = WindowState.Normal;}int shake = 0;double OriginalLeft = talkWindow.Left;double OriginalTop = talkWindow.Top;double newLeftOne = OriginalLeft - 2; double newLeftTwo = OriginalLeft + 2;double newTopOne = OriginalTop - 2; double newTopTwo = OriginalTop + 2;shakePlay.Play();while (shake < 5){talkWindow.Left = newLeftOne; talkWindow.Top = newTopOne;Thread.Sleep(50);talkWindow.Left = newLeftTwo; talkWindow.Top = newTopTwo;Thread.Sleep(50);shake++;}talkWindow.Left = OriginalLeft;talkWindow.Top = OriginalTop;}

效果图如下:

4.添加好友

协议如下:

消息头 要添加好友号码

服务器接收到此消息以后,查找号码如果存在将好友添加至好友列表,并返回给用户添加成功的消息。

如果添加自己为好友或者好友已存在 ,则返回失败信息,如图:

5.删除好友

协议方式与添加好友相同,服务器接收到此消息以后会从发送此消息的用户好友列表中删除要删除的号码,并返回操作消息。

6.注册和用户密码操作

注册采用B/S模式,语言采用VB.NET,大家一定很奇怪,因为之前做过一个类似的项目用的是VB.NET语言,比较懒所以就直接拿来用了,怎样实现在此就不做多阐述,就是很简单的WEB制作,后面会讲到如何配置,直接上图:

注册:

密码找回:

如何配置:

源码当中包括两个文件夹:Server和Client,注册网站和数据库包含在Server文件夹下,目录结构如下:

注册页面:IM\Server\WebChat

数据库:IM\Server\Data

1.数据库配置

使用SQL Server 2005以上版本直接附加即可,要保证能通过系统Windows 身份验证登陆,因为服务器是以这种方式连接数据库的,数据库设计的特别烂该拍砖的尽情的拍吧

2.注册网站配置

将webchat添加到IIS管理器,并配置本地IP地址,因为在登陆窗体有一个注册新号码,是以服务器IP地址访问网站的

数据库连接在IM\Server\WebChat\App_Code\ConnectionData.vb中修改

3.客户端配置

服务器运行时会显示所监听IP的地址,在客户端有一个IpAddress.xml配置文件,在目录:

IM\Client\Client\bin\Debug\Config\IpAddress.xml

打开以后更改为运行在服务器的IP地址即可。

附:

点击下载源码

C# WPF 基于Socket的企业聊天软件IM(源码)相关推荐

  1. 基于JAVA茶叶企业管理系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA茶叶企业管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA茶叶企业管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  2. 仿QQ聊天软件及源码java版

    一直以来,很多java的同志们都没有一个完整资料来参考.把源码贴出来,大家共享! import java.awt.BorderLayout; import java.awt.Component; im ...

  3. 基于JavaWeb的企业合同管理系统(源码+论文)

    根据客户的需要,本软件系统是公司合同管理系统,用户仅限于公司内部员工,需求功能主要是员工或者公司的管理层能通过软件系统,进行一系列的操作,从而实现管理公司的目的,下面是具体的需求: (1)既然软件系统 ...

  4. mysql 开源聊天系统_轻量级的开源企业聊天软件 喧喧聊天(界面很不错)

    喧喧是由然之协同团队推出的一款轻量级的开源企业聊天软件.喧喧官网:http://xuanxuan.chat 为什么来做喧喧? 我们在做然之协同办公系统的时候,就在寻找轻量级.开源.跨平台.容易开发的聊 ...

  5. 基于Internet的语音聊天软件设计与实现

    基于Internet的语音聊天软件设计与实现 朱国华,夏敏捷 (中原工学院 计算机科学系 ,河南 郑州 450007) 摘要:文章对网络环境下语音通信的原理进行了系统地分析,详细阐述了语音的采集.语音 ...

  6. 基于Socket的简易聊天工具

    文章目录 基于Socket的简易聊天工具 简易聊天工具的功能: 项目设计 1.界面设计 2.类的设计 程序编写 1.ChatServer 2.ChatFrame 窗体的设计 1.ChatFrame的窗 ...

  7. python socket 网络聊天室_Python基于Socket实现简单聊天室

    本文实例为大家分享了Python基于Socket实现简单聊天室,供大家参考,具体内容如下 服务端 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Ti ...

  8. 基于Java毕业设计早教课程管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计早教课程管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计早教课程管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开 ...

  9. 基于Java毕业设计业余足球队服务平台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计业余足球队服务平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计业余足球队服务平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 ...

最新文章

  1. 用git提交代码时,由于进程加锁,突然崩溃,未来得及解锁,导致其他进程访问不了...
  2. 报 java.lang.ExceptionInInitializerError 的常见解决方法
  3. Python安装第三方库临时使用国内源
  4. 前端多个圆圈均匀横向排列_web前端工程师必须掌握的24条宝贵经验!让你在前端路上更轻松!...
  5. 弯曲时空量子场论的历史与现状 (下)
  6. 对象模型学习总结 (一) . 关于封装
  7. android ndk 怎样调用第三方的so库文件。
  8. 从“制造大国”走向“制造强国”——“两化深度融合”是必然选择 考题答案
  9. 太一星晨印朝晖:从应用交付到融合安全
  10. 51单片机按键:短按,长按,按下执行松开停止
  11. 量化投资学习——技术指标介绍
  12. 一个C语言编写的坦克大战游戏
  13. 响应式网页设计的概念和应用
  14. 通信工程师传输与接入ATM网络组成和接口
  15. c语言查询学号(字符串),c语言短学期
  16. MMORPG网络游戏开发之Protobuf的基本使用
  17. r语言nonzerocoef函数_lars算法的R语言操作指南
  18. 怎么备份VMware虚拟磁盘文件或移植到其他虚拟机
  19. Markdown标记语法Typora编辑器零基础入门新手学习使用总结教程
  20. android 动画制作小软件GifMaker

热门文章

  1. 【SSLGZ 2811】2017年10月30日提高组T2 摘Galo
  2. 针对瑞萨单片机编译时空间无法全部使用问题的解决方案
  3. Git使用教程(5)-Git常用命令
  4. 数据仓库、数据湖、湖仓一体概念
  5. QQ自动添加好友脚本工具分享
  6. Python爬取微信公众号文章、点赞数
  7. 关于mavon-editor中iframe 的使用 和插入视频、音频的记录
  8. Edge浏览器出现翻译不了页面,扩展插件无法下载解决办法
  9. Apache Doris三种数据模型(Aggregate、Uniq、Duplicate)的使用及其注意点
  10. 星起航:现在做抖音小店晚不晚?