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]