C# WPF 基于Socket的企业聊天软件IM(源码)
两年前的一个设计,找资料时扒了出来,打开看了一下源码,那个时候的设计真是无框架无模式的设计,但对像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地址即可。
附: