阿东东 发表于 2013-1-6 08:22:06

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

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

http://pic002.cnblogs.com/images/2012/205276/2012060115424934.png


简介:

1.软件采用C/S模式,服务器基于.NET控制台应用程序,客户端基于.NET WPF,数据库采用SQL Server
2.在通信上采用TCP协议进行信息传递,以服务器转发方式通信,用户注册及密码管理基于B/S(ASP.NET)
3.主要完成了用户注册、用户密码修改、添加好友、删除好友;文字信息转发(支持字体)、抖动窗体、发送图片(支持GIF,但有严重问题)

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

http://pic002.cnblogs.com/images/2012/205276/2012060113530177.pnghttp://pic002.cnblogs.com/images/2012/205276/2012060113561951.png

实现:

1.发送文字
采用服务器转发方式发送,首先把消息通过相应的协议包装发送到服务器端,再由服务器端转发到指定的客户端,协议如下:
接收号码字体消息头#Font字体样式(包括颜色,大小,样式等等)消息内容服务器端接收到后按好友号码查找服务器端用户列表(如图服务器工作流程)获取Socket实例如果此好友在线就将信息发送过去
接收方接收到信息以后拆分数据,设置字体,显示消息内容。
2.发送图片
此模式有严重的问题,由于工作时间一直没有对其更新过,如果大家有兴趣可以自行修改,最好不要使用服务器转发模式,而是直接对客户端建立P2P连接。
也是采用服务器转发方式(我知道有过经验的人看到以此方式发送图片一定要拍我了),协议如下:
接收号码图片消息头#PIC图片尺寸如何实现在此就不讲了,就是一鸡肋。
3.发送拌动窗体
抖动窗体实现很简单,按一定规律改变窗体的位置即可,协议如下:
消息头接收号码服务器接收到此消息以后获取消息头,查找用户列表获取Socket实例,如果此好友在线就将信息发送过去
接收端接到此消息,即执行窗体抖动操作,代码如下:
<div class="cnblogs_code">      /// <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;      }
页: [1]
查看完整版本: C# WPF 基于Socket的企业聊天软件IM(源码)